我是新手。我只想在我的應用程序中播放mp3。 我已閱讀文檔,並瀏覽了許多網站,包括本文。 的步驟應該是從存儲器播放mp3的最簡單方法
MediaPlayer.setDataSource(String) or (context, Uri)
.prepare();
.start();
我的文件是/storage/emulated/0/New Folder/ztz3.mp3
.. 如果我使用External.getExternalDirectory().getPath()
結果是/storage/emulated/0/
,但它只是不會玩。 我瀏覽過很多網站..嘗試很多東西,但它只是沒有工作。 我已經使用權限來讀取外部存儲。
和我瀏覽的網站有太多不同的答案,只會讓我更困惑。一些使用AudioManager.STREAM的有些使用MediaPlayer.create。 我也跟着那個......但它不會玩。
public class MainActivity extends AppCompatActivity {
Button buttonPlay;
MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonPlay = (Button) findViewById(R.id.buttonPlay);
// String filePath = Environment.getExternalStorageDirectory()+
// "/New Folder/ztz_3_adding.mp3";
// String filePath = "/storage/emulated/0/New Folder/ztz_3_adding.mp3";
Log.e("Dir", Environment.getExternalStorageDirectory().toString());
Log.e("Directory", Environment.getExternalStorageDirectory().getPath());
mediaPlayer = new MediaPlayer();
//mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
// mediaPlayer.setDataSource("/storage/emulated/0/New Folder/ztz_3_adding.mp3");
// mediaPlayer.setDataSource("file://storage/emulated/0/New Folder/ztz_3_adding.mp3");
mediaPlayer.setDataSource(getApplicationContext(),
Uri.parse(Environment.getExternalStorageDirectory().getPath()+
"/New Folder/ztz_3_adding.mp3"));
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
//mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
buttonPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
}
});
}
}
我認爲這個問題是在準備()方法..但我不知道如何解決它。 我已閱讀並嘗試過使用靜態MediaPlayer.create或其他內容的網站。
我只是想要一個簡單的媒體播放器,使用字符串值,我可以隨時更改播放基於佈局的MP3文件。
感謝之前的幫助......
日誌...
02-25 22:10:08.546 17345-17345/com.echo.tesmediaplayer E /迪爾: /storage/emulated/0 02-25 22:10:08.548 17345-17345/com.echo.tesmediaplayer E/Directory:/ storage/emulated/0 02-25 22:10:08.563 17345-17345 /? E/MediaPlayer:在 狀態下調用prepareAsync 1 02-25 22:10:08.564 17345-17345 /? E/AndroidRuntime:致命 例外:主
過程:com.echo.tesmediaplayer,PID:17345 了java.lang.RuntimeException:無法啓動活動 ComponentInfo {com.echo.tesmediaplayer/com.echo.tesmediaplayer。 MainActivity}:java.lang.IllegalStateException
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2440) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500)在 android.app .ActivityThread.access $ 900(ActivityThread.java:163)at android.app.ActivityThread $ H.han dllMessage(ActivityThread.java:1362)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:148)at android.app.ActivityThread.main( ActivityThread.java:5585)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:730) at com.android.internal .os.ZygoteInit.main(ZygoteInit.java:620)
引起:java.lang。 IllegalStateExceptionat android.media.MediaPlayer。_prepare(本機方法)在 android.media.MediaPlayer.prepare(MediaPlayer.java:1158)在 com.echo.tesmediaplayer.MainActivity.onCreate(MainActivity.java:48) 在android.app.Activity.performCreate (Activity.java:6279)在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2393) 在 android.app.ActivityThread.handleLaunchActivity在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1362)(ActivityThread.java:2500) 在android.app.ActivityThread.access $ 900(ActivityThread.java:163) 一t android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:148)at android.app.ActivityThread.main(ActivityThread.java:5585)at java .lang.reflect.Method.invoke(Native Method)at .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:730) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java :620)
我只用READ_EXTERNAL_STORAGE .. 但我已經加入其他兩個錯誤還是一樣。 –
奇怪的是,您的代碼在我的設備上正常工作。 (Android 5.0)。試試這個: 'final MediaPlayer mp = MediaPlayer.create(this,Uri.parse(Environment.getExternalStorageDirectory()。getPath()+「...」));' 這樣就不需要調用prepare方法任何。你只需要調用'mp.start();'_after_ buffering完成! 希望它現在能工作。 – SirJavaGaming
我試過了.. final MediaPlayer mp = MediaPlayer.create(this,Uri.parse(Environment.getExternalStorageDirectory()。getPath()+「/ New Folder/ztz_3_adding.mp3」)); 但我在.getPath遇到錯誤非法字符() 我的代碼工作正常,您的手機上?有點奇怪。 –