一、MP3播放器
查看Android API文档可以看到MediaPlayer状态转换图:
练习:
class="code_img_closed" src="/Upload/Images/2014122318/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('c05c0fe3-86db-4a89-ae0c-6fa21fee5069',event)" src="/Upload/Images/2014122318/2B1B950FA3DF188F.gif" alt="" />package com.shellway.mp3player; import java.io.File; import java.io.IOException; import android.support.v7.app.ActionBarActivity; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.content.Context; import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends ActionBarActivity { //媒体播放器 private MediaPlayer mp; private EditText songName; //之前是否暂停过 private boolean pause; private File file; private TelephonyManager tm; //暂停保存点 private int position = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); songName = (EditText) findViewById(R.id.song_name); tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } private class MyPhoneStateListener extends PhoneStateListener{ @Override public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE://闲置状态 if (position > 0 && mp != null) { //跳转到指定的保存点位置 mp.seekTo(position); mp.start(); } break; case TelephonyManager.CALL_STATE_OFFHOOK://接听状态 if(mp != null){ if(mp.isPlaying()){ position = mp.getCurrentPosition(); mp.pause(); } } break; case TelephonyManager.CALL_STATE_RINGING://响铃状态 if (mp.isPlaying()) { position = mp.getCurrentPosition(); mp.pause(); } break; default: break; } } } //这里是利用Activity生命周期的方法监听来电时暂停播放 // @Override // protected void onResume() { // // TODO Auto-generated method stub // super.onResume(); // if(position > 0){ // //跳转到指定的位置 // mp.seekTo(position); // mp.start(); // } // } // // @Override // protected void onPause() { // // TODO Auto-generated method stub // super.onPause(); // position = mp.getCurrentPosition(); // mp.pause(); // } public void play(View view){ String name = songName.getText().toString(); file = new File(Environment.getExternalStorageDirectory(),name+".mp3"); if (!file.exists()) { Toast.makeText(this, "文件不存在", Toast.LENGTH_SHORT).show(); mp=null; }else{ if (mp!=null) { if (mp.isPlaying()) { Toast.makeText(this, "歌曲已经在播放中", Toast.LENGTH_SHORT).show(); }else{ play(); } }else{ play(); } } } public void play(){ try { mp = new MediaPlayer(); //置为初始状态 mp.reset(); //指定要播放的文件 mp.setDataSource(file.getAbsolutePath()); //准备(缓冲) mp.prepare(); //设置缓冲完成监听 mp.setOnPreparedListener(new MyOnPreparedListener()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private class MyOnPreparedListener implements OnPreparedListener{ @Override public void onPrepared(MediaPlayer mp) { // TODO Auto-generated method stub //播放 mp.start(); } } public void pause(View view){ if (mp.isPlaying()) { //暂停播放 mp.pause(); Button bt = (Button) view; bt.setText("继续"); pause = true; }else{ if (pause) { mp.start(); Button bt = (Button) view; bt.setText("停止"); } } } public void stop(View view){ if (mp!=null) { //停止播放 mp.stop(); } } public void reset(View view){ if (mp!=null) { mp.start(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if (mp != null) { mp.release(); mp = null; } } }MainActivity.java
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请输入歌曲名" /> <EditText android:id="@+id/song_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Complicated" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="play" android:text="播放" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="pause" android:text="暂停" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="stop" android:text="停止" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="reset" android:text="重播" /> </LinearLayout> </LinearLayout>activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.shellway.mp3player" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <!-- 监听来电状态需要读取电话状态权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>AndroidManifest.xml
运行结果截图:
二:MP4播放器
稍等,努力更新中。。。。