客户要求做一个工厂模式的测试音乐播放器
要求使用mediaplayer 从听筒播放
音乐文件遍历手机根目录获取存放在一个listview
下面放上代码
mainactivity:
import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private MediaPlayer mPlayer; private AudioManager mAudioManager; private ListView lvFiles; private List<File> mFiles; private int mIndex = 0; private Handler mHander; private final Runnable mRunnable = new Runnable() { @Override public void run() { play(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (mHander == null) { mHander = new Handler(); } lvFiles = (ListView) findViewById(R.id.lv_data); mAudioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE); mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), AudioManager.FLAG_PLAY_SOUND); setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { } else { Toast.makeText(this, "没有SD卡", Toast.LENGTH_LONG).show(); } mFiles = new ArrayList<File>(); File file = Environment.getExternalStorageDirectory().getAbsoluteFile(); getAllFiles(file); lvFiles.setAdapter(new ArrayAdapter<File>(this, android.R.layout.simple_list_item_1, mFiles)); lvFiles.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (mPlayer != null && mPlayer.isPlaying()) { mPlayer.stop(); mPlayer.release(); mPlayer = null; } mIndex = arg2; mHander.postDelayed(mRunnable,5000); } }); } protected void onPause() { super.onPause(); if (mPlayer != null) mPlayer.stop(); } protected void onDestroy() { if (mPlayer != null) { mPlayer.stop(); } mAudioManager.setMode(AudioManager.MODE_NORMAL); super.onDestroy(); } private void getAllFiles(File root) { File files[] = root.listFiles(); if (files != null) { for (File f : files) { if (f.isDirectory()) { // getAllFiles(f); } else { if (f.getAbsolutePath().contains(".wav")) { mFiles.add(f); }else if (f.getAbsolutePath().contains(".ogg")){ mFiles.add(f); }else if (f.getAbsolutePath().contains(".mp3")){ mFiles.add(f); } } } } } private void play() { mPlayer = new MediaPlayer(); mPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); String fileName = "file://" + mFiles.get(mIndex).getAbsolutePath(); try { mPlayer.setDataSource(String.valueOf(Uri.parse(fileName))); mPlayer.setLooping(true); mPlayer.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mPlayer.start(); } }
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.fileexpolrer" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" > </uses-permission> <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>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.fileexpolrer" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" > </uses-permission> <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>