android学习之利用MediaPlayer制作音乐播放器
2014-11-11 17:02
519 查看
使用步骤:
1.先创建MediaPlayer对象
2.利用setDataSource()方法,将要播放的文件(歌曲)路径给MediaPlayer对象。
3.利用prepare()方法,进行缓冲(准备阶段)
4.调用setOnPreparedListener()方法,进行监听是否缓冲好。
5.当缓冲好,调用start()方法开始播放。
其它方法:
reset()方法:使得MediaPlayer对象所有参数回到初始状态
isPlaying()方法:判断是否播放
start()方法:播放
seekTo(int position)方法:从哪个地方播放 (postion是播放的位置)
stop()方法:停止
pause()方法:暂停
代码部分
Activity部分
package com.example.mp3_strudy_ysq;
import java.io.File;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
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 Button start_btn;
private Button pause_btn;
private Button reset_btn;
private Button stop_btn;
private EditText file_path;
private MediaPlayer mediaPlayer;
private String path;//文件路径
private boolean pause;//暂停标志:true.暂停,false.没有暂停
private int position;//当来电话了,播放文件的位置记录
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 初始化个UI组件
* */
start_btn=(Button) findViewById(R.id.start_btn);
pause_btn=(Button) findViewById(R.id.pause_btn);
reset_btn=(Button) findViewById(R.id.reset_btn);
stop_btn=(Button) findViewById(R.id.stop_btn);
file_path=(EditText) findViewById(R.id.file_path);
/**
* 绑定监听
* */
start_btn.setOnClickListener(this);
pause_btn.setOnClickListener(this);
reset_btn.setOnClickListener(this);
stop_btn.setOnClickListener(this);
/**
* 创建MediaPlayer对象
* */
mediaPlayer=new MediaPlayer();
/**
* 最后要求:当有电话时候,就不能播放歌曲,当电话结束,就继续播放
* */
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
private final class MyPhoneListener extends PhoneStateListener{
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING://来电
if(mediaPlayer.isPlaying()) {
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
break;
case TelephonyManager.CALL_STATE_IDLE:
if(position>0 && path!=null){
play(position);
position = 0;
}
break;
}
}
}
@Override
protected void onDestroy() {
System.out.println("执行了我!");
mediaPlayer.release();
mediaPlayer = null;
super.onDestroy();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start_btn:
/**
* 播放
* 第一步:获取输入文件地址,并判断文件是否存在
* 第二步:当文件存在,将文件路径传入到mediaPlayer对象,并进行缓冲文件(准备文件)
* 第三步:设置缓冲(文件准备)监听
* 第四步:当缓冲成功,播放文件
* */
String fileName=file_path.getText().toString();
File file=new File(Environment.getExternalStorageDirectory(), fileName);
if(file.exists()){
//文件存在
path=file.getAbsolutePath();//获取文件绝对路径
play(0);
}else{
path=null;
Toast.makeText(MainActivity.this,R.string.filenoexist,Toast.LENGTH_SHORT).show();
}
break;
case R.id.pause_btn:
/**
* 暂停
* 1.先判断,是否在播放
* 2.当在播放,就执行暂停,并将按钮文本信息改为:继续,标志pause=true.
* 3.不在播放,判断是否是暂停状态(根据标志pause判断),是就继续播放,并将按钮文本信息改为:暂停,标志pause=false
* */
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
pause=true;
pause_btn.setText(R.string.continues);
}else{
if(pause){
mediaPlayer.start();
pause=false;
pause_btn.setText(R.string.pause);
}
}
break;
case R.id.reset_btn:
/**
* 重播
* 1.判先判断,是否在播放
* 2.当在播放,就执行从开始播放
* 3.当不在播放,就判断播放文件路径是否存在,存在就直接播放
* */
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
if(path!=null){
play(0);
}
}
break;
case R.id.stop_btn:
/**
* 停止
* 1.判先判断,是否在播放
* 2.当在播放,就执行停止
* */
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
default:
break;
}
}
public void play(int postion){
try {
mediaPlayer.reset();//将各项数据恢复到初始状态
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();//设置缓冲文件
//设置准备监听
mediaPlayer.setOnPreparedListener(new onPrepared(postion));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class onPrepared implements OnPreparedListener{
private int position;
public onPrepared(int position){
this.position=position;
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();//播放文件
if(position>0)mediaPlayer.seekTo(position);//设置从哪播放
}
}
}
layout的xml配置
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/request"
/>
<EditText
android:id="@+id/file_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/start_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start"
/>
<Button
android:id="@+id/pause_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pause"
/>
<Button
android:id="@+id/reset_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reset"
/>
<Button
android:id="@+id/stop_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/stop"
/>
</LinearLayout>
</LinearLayout>
权限添加
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
1.先创建MediaPlayer对象
2.利用setDataSource()方法,将要播放的文件(歌曲)路径给MediaPlayer对象。
3.利用prepare()方法,进行缓冲(准备阶段)
4.调用setOnPreparedListener()方法,进行监听是否缓冲好。
5.当缓冲好,调用start()方法开始播放。
其它方法:
reset()方法:使得MediaPlayer对象所有参数回到初始状态
isPlaying()方法:判断是否播放
start()方法:播放
seekTo(int position)方法:从哪个地方播放 (postion是播放的位置)
stop()方法:停止
pause()方法:暂停
代码部分
Activity部分
package com.example.mp3_strudy_ysq;
import java.io.File;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
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 Button start_btn;
private Button pause_btn;
private Button reset_btn;
private Button stop_btn;
private EditText file_path;
private MediaPlayer mediaPlayer;
private String path;//文件路径
private boolean pause;//暂停标志:true.暂停,false.没有暂停
private int position;//当来电话了,播放文件的位置记录
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 初始化个UI组件
* */
start_btn=(Button) findViewById(R.id.start_btn);
pause_btn=(Button) findViewById(R.id.pause_btn);
reset_btn=(Button) findViewById(R.id.reset_btn);
stop_btn=(Button) findViewById(R.id.stop_btn);
file_path=(EditText) findViewById(R.id.file_path);
/**
* 绑定监听
* */
start_btn.setOnClickListener(this);
pause_btn.setOnClickListener(this);
reset_btn.setOnClickListener(this);
stop_btn.setOnClickListener(this);
/**
* 创建MediaPlayer对象
* */
mediaPlayer=new MediaPlayer();
/**
* 最后要求:当有电话时候,就不能播放歌曲,当电话结束,就继续播放
* */
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
private final class MyPhoneListener extends PhoneStateListener{
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING://来电
if(mediaPlayer.isPlaying()) {
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
break;
case TelephonyManager.CALL_STATE_IDLE:
if(position>0 && path!=null){
play(position);
position = 0;
}
break;
}
}
}
@Override
protected void onDestroy() {
System.out.println("执行了我!");
mediaPlayer.release();
mediaPlayer = null;
super.onDestroy();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start_btn:
/**
* 播放
* 第一步:获取输入文件地址,并判断文件是否存在
* 第二步:当文件存在,将文件路径传入到mediaPlayer对象,并进行缓冲文件(准备文件)
* 第三步:设置缓冲(文件准备)监听
* 第四步:当缓冲成功,播放文件
* */
String fileName=file_path.getText().toString();
File file=new File(Environment.getExternalStorageDirectory(), fileName);
if(file.exists()){
//文件存在
path=file.getAbsolutePath();//获取文件绝对路径
play(0);
}else{
path=null;
Toast.makeText(MainActivity.this,R.string.filenoexist,Toast.LENGTH_SHORT).show();
}
break;
case R.id.pause_btn:
/**
* 暂停
* 1.先判断,是否在播放
* 2.当在播放,就执行暂停,并将按钮文本信息改为:继续,标志pause=true.
* 3.不在播放,判断是否是暂停状态(根据标志pause判断),是就继续播放,并将按钮文本信息改为:暂停,标志pause=false
* */
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
pause=true;
pause_btn.setText(R.string.continues);
}else{
if(pause){
mediaPlayer.start();
pause=false;
pause_btn.setText(R.string.pause);
}
}
break;
case R.id.reset_btn:
/**
* 重播
* 1.判先判断,是否在播放
* 2.当在播放,就执行从开始播放
* 3.当不在播放,就判断播放文件路径是否存在,存在就直接播放
* */
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
if(path!=null){
play(0);
}
}
break;
case R.id.stop_btn:
/**
* 停止
* 1.判先判断,是否在播放
* 2.当在播放,就执行停止
* */
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
default:
break;
}
}
public void play(int postion){
try {
mediaPlayer.reset();//将各项数据恢复到初始状态
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();//设置缓冲文件
//设置准备监听
mediaPlayer.setOnPreparedListener(new onPrepared(postion));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class onPrepared implements OnPreparedListener{
private int position;
public onPrepared(int position){
this.position=position;
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();//播放文件
if(position>0)mediaPlayer.seekTo(position);//设置从哪播放
}
}
}
layout的xml配置
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/request"
/>
<EditText
android:id="@+id/file_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/start_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start"
/>
<Button
android:id="@+id/pause_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pause"
/>
<Button
android:id="@+id/reset_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reset"
/>
<Button
android:id="@+id/stop_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/stop"
/>
</LinearLayout>
</LinearLayout>
权限添加
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
相关文章推荐
- android多媒体音乐(MediaPlayer)播放器制作代码
- 利用MEDIAPLAYER制作ANDROID播放器 .
- 利用MEDIAPLAYER制作ANDROID播放器
- 【Android开发学习04】长时间的音乐播放实现MediaPlayer
- Android 酷炫来袭:制作属于你自己的音频播放器(综合运用MediaPlayer、Service、Broadcast、ListView、SeekBar)
- Android_播放器_利用Service通过MediaPlayer播放歌曲并完成歌词同步绘制
- Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)
- android多媒体音乐(MediaPlayer)播放器
- Android视频播放器之学习MediaPlayer
- 【Android Dev Guide - 04】 - Media - 学习使用MediaPlayer播放音乐
- Android service学习总结和利用service实现的后台音乐播放功能
- 【Android Dev Guide - 04】 - Media - 学习使用MediaPlayer播放音乐
- qt phonon 制作音乐播放器学习(怎样让播放进度条和音乐播放时长同步)
- Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)
- 利用Android的媒体库,遍历SD卡中的音乐文件,并用Service制作简单的音乐播放
- android 教你制作音乐播放器
- android 利用 MediaPlayer 类播放音乐
- 【Android Dev Guide - 04】 - Media - 学习使用MediaPlayer播放音乐
- 【Android Dev Guide - 04】 - Media - 学习使用MediaPlayer播放音乐
- 如何学习Android及如何利用android来赚钱