首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

应用Acitivity实现简易的音乐播放器

2013-02-24 
使用Acitivity实现简易的音乐播放器本篇使用Activity来实现一个简单的音乐播放器,提供的功能是在播放音乐

使用Acitivity实现简易的音乐播放器

本篇使用Activity来实现一个简单的音乐播放器,提供的功能是在播放音乐的同时可以打开其他的软件,在来电是暂停播放,这里使用到的类有:

android.os.Environment  读取系统存储目录的文件

android.media.MediaPlayer 系统媒体播放器

android.telephony.TelephonyManager  电话管理器

android.telephony.PhoneStateListener  电话状态监听器


我们知道如果不做任何处理,在Activity播放音乐的时候,去打开了另外一个Activity,音乐播放器会仍然播放,因为它没有被摧毁,但是当我们点击模拟器的返回键后,它就会回调onpause()--->onStop()-->onDestroy()方法,此时Activity已经被销毁,我们可以在onPause()方法中来保存进度,然后再onResume()方法中来恢复播放进度。

本实例实现的是播放音乐的同时可以打开其他的软件,当有来电就暂停播放,当电话挂断了就继续播放,这里需要用到的一个权限来监听电话的状态:<uses-permission android:name="android.permission.READ_PHONE_STATE"/>


播放音乐的Activity界面:

应用Acitivity实现简易的音乐播放器

当我们点击打开一个activity后,音乐播放器并没有停止(这个不用做任何处理)。

以下是源代码:

main.xml:

package com.music.activity;import java.io.File;import java.io.IOException;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Bundle;import android.os.Environment;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private static String TAG = "MainActivity";private EditText nameText;//mp3文件名称private String path;//文件路径private MediaPlayer mediaPlayer;private boolean pause;//暂停标志private int position;//播放进度    @Override    public void onCreate(Bundle savedInstanceState) {    Log.i(TAG, "onCreate()");        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mediaPlayer = new MediaPlayer();        nameText = (EditText)findViewById(R.id.filename);        TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);        telephonyManager.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);    }    @Overrideprotected void onDestroy() {Log.i(TAG, "onDestroy()");    mediaPlayer.release();    mediaPlayer = null;    super.onDestroy();}//电话状态监听器    private final class MyPhoneListener extends PhoneStateListener{@Overridepublic 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();mediaPlayer.seekTo(position);position = 0;}default:break;}}    }public void mediaplay(View v){    switch (v.getId()) {case R.id.playButton:String fileName = nameText.getText().toString();File audio = new File(Environment.getExternalStorageDirectory(),fileName);if(audio.exists()){path = audio.getAbsolutePath();play();}else{Toast.makeText(getApplicationContext(), fileName+"不存在", 1).show();}break;case R.id.pauseButton:if(mediaPlayer.isPlaying()){mediaPlayer.pause();pause = true;((Button)v).setText(R.string.continues);}else{if(pause){mediaPlayer.start();//继续播放pause = false;((Button)v).setText(R.string.pauseButton);}}break;case R.id.resetButton:if(mediaPlayer.isPlaying()){mediaPlayer.seekTo(0);//播发进度置0}else{if(path!=null){play();}}break;case R.id.stopButton:if(mediaPlayer.isPlaying())mediaPlayer.stop();break;}    }    //播放媒体文件private void play() {try {mediaPlayer.reset();//重置各项参数mediaPlayer.setDataSource(path);mediaPlayer.prepare();//进行数据缓冲mediaPlayer.setOnPreparedListener(new PreparedListener());} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//监听缓冲完毕事件private final class PreparedListener implements OnPreparedListener{//缓冲完毕回调该方法@Overridepublic void onPrepared(MediaPlayer mp) {mediaPlayer.start();;//开始播放}}public void openActivity(View v){Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);}}


AndroidManifest.xml

<activity android:name=".OtherActivity"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

热点排行