本篇使用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实现简易的音乐播放器_第1张图片

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

以下是源代码:

main.xml:

<?xml version="1.0" encoding="utf-8"?><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="音乐播放器" /><EditText     android:id="@+id/filename"    android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="pugongying.mp3"/><LinearLayout     android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="horizontal" >    <Button         android:id="@+id/playButton"    android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/playButton"        android:onClick="mediaplay"/>    <Button         android:id="@+id/pauseButton"    android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/pauseButton"        android:onClick="mediaplay"/>    <Button         android:id="@+id/resetButton"    android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/resetButton"        android:onClick="mediaplay"/>    <Button         android:id="@+id/stopButton"    android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/stopButton"        android:onClick="mediaplay"/>    <Button     android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="打开一个activity"        android:onClick="openActivity"/></LinearLayout></LinearLayout>

values/String.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">Hello World, MainActivity!</string>    <string name="app_name">Android_Music</string>    <string name="playButton">播放</string>    <string name="pauseButton">暂停</string>    <string name="resetButton">重播</string>    <string name="stopButton">停止</string>    <string name="continues">继续</string></resources>


MainActivity.java

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"/>

更多相关文章

  1. android音乐播放器监听电话状态,解决通话中的音乐的播放
  2. Android拨打电话功能实例详解
  3. android播放本地音乐程序
  4. Android仿虾米音乐播放器之通知栏notification解析
  5. 广播接收者android,电话拦截广播,电话接收者demo
  6. Skype 视频电话功能终于支持更多 Android 手机
  7. Android使用OKHttp3实现下载(断点续传、显示进度)
  8. Linux下的Android电话管理软件――QtADB(安装启动方法)

随机推荐

  1. android 单选按钮组的使用
  2. Android实现导航菜单左右滑动效果
  3. Android RadioGroup中横向、竖向布局Radi
  4. andorid - NDK 编译mips-platform代码
  5. android计时器类CountDownTime的运用及扩
  6. android SystemClock设置系统时间需要sys
  7. Android Wi-Fi基本操作
  8. Android 三言两语
  9. [置顶] android动效开篇
  10. Android绘图基础:Canvas、Paint等的使用