Android 多媒体框架支持多种多样的多媒体文件,因此可以很轻松的将音频、视频、图片集成到应用中去。 通过使用 MediaPlayer APIs.
多媒体文件可以存储在应用程序的 raw 文件夹下,也可以存储在手机的文件系统中,甚至可以是来自与网络的流媒体。
这篇文章展示了如何写出一个性能不错,用户体验良好的多媒体用用程序。
注意: 你只能通过标准输出设备来播放音频文件。目前来讲,就是通过手机的扬声器和蓝牙耳机。 不能在通话时播放音频文件
在使用 MediaPlayer 开发你的应用之前,必须在 mainfest 文件中声明需要使用哪些功能。
如果你打算使用 MediaPlayer 来播放网络流媒体内容,那么你的应用需要有这个权限
如果你想要应用不灭屏或者进程不进入休眠状态,或者你像要在你的应用程序中使用 MediaPlayer.setScreenOnWhilePlaying() 方法或 MediaPlayer.setWakeMode() 方法, 你需要添加这个权限
首先在布局文件中
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_width="match_parent"
android:layout_height="wrap_content" />
在main.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setOnclick();
initViewData();
//处理进度条更新
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
//更新进度
int position = mediaPlayer.getCurrentPosition();
int time = mediaPlayer.getDuration();
int max = seekBar.getMax();
seekBar.setProgress(position * max / time);
break;
default:
break;
}
}
};
}
private void setOnclick() {
mediaPlayer1 = MediaPlayer.create(this,R.raw.ok);
btn_paly.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaPlayer.start();
//后台线程发送消息进行更新进度条
final int milliseconds = 50;
new Thread(){
@Override
public void run(){
while(true){
try {
sleep(milliseconds);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mHandler.sendEmptyMessage(0);
}
}
}.start();
}
});
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaPlayer.pause();
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//手动调节进度
// TODO Auto-generated method stub
int dest = seekBar.getProgress();
int time = mediaPlayer.getDuration();
int max = seekBar.getMax();
mediaPlayer.seekTo(time*dest/max);
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
// TODO Auto-generated method stub
}
});
}
private void initView() {
btn_paly = findViewById(R.id.play);
btn_stop = findViewById(R.id.stop);
seekBar = findViewById(R.id.seekbar);
}