界面布局,水平方向四个按钮平均分布,使用权重,定义android:layout_width=”0dp”,定义layout_weight=”1”这个属性全都一致就是平均分布

获取File对象,通过new File()来实现

判断文件是否存在,File对象的exists()方法,File对象的length()必须大于0

获取MediaPlayer对象,通过new出来

开始播放

调用MediaPlayer对象的setAudioStreamType()方法,设置音频流类型,参数:AudioManager.STREAM_MUSIC

调用MediaPlayer对象的setDataSource()方法,设置数据源,参数:String文件路径,也可以是http的

调用MediaPlayer对象的prepare()方法,准备

调用MediaPlayer对象的start()方法,播放

调用播放按钮的setEnable()方法,设置按钮为不可点击,参数:false

当播放完毕后应设置按钮可点击

调用MediaPlayer对象的setOnCompletionListener()方法,设置完成监听器,参数:OnCompletionListener接口,使用匿名内部类实现接口,重写方法onCompletion()方法,在这个方法里面调用播放按钮的setEnable(true)

停止播放

判断MediaPlayer对象不为空,并且MediaPlayer对象isPlaying()为真

调用MediaPlayer对象的stop()方法,停止播放

调用MediaPlayer对象的release()方法,是否

设置MediaPlayer对象为null

重新播放

判断MediaPlayer对象不为空,并且MediaPlayer对象isPlaying()为真

调用MediaPlayer对象seekTo()方法,设置播放进度,参数:0就可以

如果不存在,那么直接调用上面的播放函数

暂停播放

判断MediaPlayer对象不为空,并且MediaPlayer对象isPlaying()为真

调用MediaPlayer对象的pause()方法,暂停播放

调用暂停按钮的setText()方法,设置文字成:继续

在这个点击事件里判断文字是否为”继续”,如果是,就继续播放

调用MediaPlayer对象的start()方法

调用暂停安妮的setText()方法,设置文字成:暂停

MainActivity.java

package com.tsh.tshplayer;import java.io.File;
import java.io.IOException;import android.app.Activity;
import android.content.SharedPreferences.Editor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private EditText et_music;private Button bt_play, bt_pause, bt_stop, bt_replay;private MediaPlayer player;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_music = (EditText) findViewById(R.id.et_music);bt_play = (Button) findViewById(R.id.bt_play);bt_pause = (Button) findViewById(R.id.bt_pause);bt_stop = (Button) findViewById(R.id.bt_stop);bt_replay = (Button) findViewById(R.id.bt_replay);bt_play.setOnClickListener(this);bt_pause.setOnClickListener(this);bt_stop.setOnClickListener(this);bt_replay.setOnClickListener(this);}// 点击事件
    @Overridepublic void onClick(View v) {switch (v.getId()) {// 播放case R.id.bt_play:play();break;// 暂停case R.id.bt_pause:pause();break;// 重播case R.id.bt_replay:replay();break;// 停止case R.id.bt_stop:stop();break;}}//停止播放private void stop() {if(player!=null&&player.isPlaying()){player.stop();bt_play.setEnabled(true);}}//重播音乐private void replay() {if(player!=null&&player.isPlaying()){player.seekTo(0);}}//暂停音乐private void pause() {if(player!=null&&player.isPlaying()){player.pause();bt_pause.setText("继续");}else if(bt_pause.getText().toString().trim().equals("继续")){player.start();bt_pause.setText("暂停");}}// 播放音乐private void play() {String music = et_music.getText().toString().trim();File file = new File(music);if (file.exists() && file.length() > 0) {try {player = new MediaPlayer();player.setAudioStreamType(AudioManager.STREAM_MUSIC);player.setDataSource(music);player.prepare();player.start();// 设置按钮bt_play.setEnabled(false);//音乐完成回调player.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {bt_play.setEnabled(true);}});} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "播放音乐失败", 0).show();}} else {Toast.makeText(this, "音乐文件不存在", 0).show();}}
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="${relativePackage}.${activityClass}" ><EditTextandroid:id="@+id/et_music"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="音乐路径" /><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Button android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content"android:text="播放"android:id="@+id/bt_play"/><Button android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content"android:text="暂停"android:id="@+id/bt_pause"/><Button android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content"android:text="重播"android:id="@+id/bt_replay"/><Button android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content"android:text="停止"android:id="@+id/bt_stop"/></LinearLayout></LinearLayout>

[android] 多媒体播放api简介相关推荐

  1. android中api简介

    1:DisplayMetrics  Display 获取屏幕的基本信息 DisplayMetrics displayMetrics=new DisplayMetrics(); Display disp ...

  2. Android -- 多媒体播放之MediaPlayer基础简介

    Android -- MediaPlayer基础简介 MediaPlayer是Android中的一个多媒体播放类,我们能通过它控制音视频流或本地音视频资源的播放过程. 这段时间查阅了Android官方 ...

  3. 【Android UI】Path 测量 PathMeasure ② ( PathMeasure API 简介 | nextContour 函数 | getPosTan 函数 ★ | 曲线切线处理 )

    文章目录 一.PathMeasure API 简介 1.nextContour 函数 2.getPosTan 函数 ★ 一.PathMeasure API 简介 PathMeasure 官方文档 : ...

  4. Android 中文API (94) —— MediaController

    前言 本章内容是android.widget.MediaController,版本为Android 2.3 r1,翻译来自"唐明",再次感谢"唐明" !期待你一 ...

  5. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  6. Android 应用清单简介1

    Android的应用清单实则指的是AndroidManifest.xml文件.里面有许多标签元素见过,但是没有彻底的了解到底是用来干嘛的,很多事情往往因为不知道的太多而采取南辕北辙的方法.以前做过这样 ...

  7. 初步探究Android App API接口测试--实战

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

  8. android 开发环境ppt,Android开发环境简介.ppt

    Android开发环境简介 1.3 第一个Android应用程序 src目录中存放的是该项目的源文件,所有允许用户修改的java文件和用户自己添加的java文件,都保存在这个目录中. gen目录下的文 ...

  9. 如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介

    如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介 一.总结 一句话总结:Geolocation API(地理位置应用程序接口)提供了一个可以准确知道浏览器用户当前位置的方法 ...

最新文章

  1. .NET 3.5 中WCF客户端代理性能改进以及最佳实践
  2. nodejs async
  3. python 变量引用_Python 知识要点:变量及引用
  4. linux常用命令--diff
  5. linux下练习 c++ 关联式容器multimap特性
  6. 3月6日云栖精选夜读:如何实现32.5万笔/秒的交易峰值?阿里交易系统TMF2.0技术揭秘...
  7. json字符串与json对象之间的转换
  8. AOP 详解 、AOP 中通知类型 、AOP 两种实现方式(Schema-base 和 AspectJ)
  9. 资深前端开发工程师分享:关于前端学习路线的一些建议
  10. 【CCCC】L3-015 球队“食物链” (30分),搜索排列
  11. Linux I2C设备驱动编写(二)
  12. lucene2.0+heritrix
  13. 谈google搜索引擎的使用
  14. 洛谷 P1957 口算练习题 题解 字符串 C/C++
  15. 变上限积分求导公式(通用公式)
  16. ## GEE Landsat8 Collection2 level2 数据集 计算LST地表温度
  17. 红米1S联通版_标注:2013029_官方线刷包_救砖包_解账户锁
  18. 什么是大数据采集?大数据采集的过程是什么?
  19. oled屏幕和amoled有什么区别,哪个好?
  20. 南京邮电大学微型计算机原理与接口技术答案,微型计算机原理与接口技术南京邮电大学...

热门文章

  1. 实现机器人避障的全套解决方案
  2. 会计专硕论文选题案例怎么找?
  3. AutoCAD 2019 怎么设置经典模式(经典界面)?
  4. MFC:使用剪贴板,怎么将内容复制到剪贴板
  5. scp 拷贝文件到服务器,scp 拷贝文件到远程服务器
  6. 一阶低通滤波器的数字实现
  7. 张飞是一员粗中有细的猛将
  8. R语言期末复习资料----助力高绩点
  9. 基于XMPP的IOS聊天客户端程序(IOS端三)
  10. 2022年中级职称评定条件及流程