我是新手。我只是想在我的应用程序中播放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();
}
});
}
}
我认为问题出在prepare()方法中..但我不知道如何修复它。 我已经阅读并尝试了一个说使用静态MediaPlayer.create的网站。
我只想要一个使用字符串值的简单媒体播放器,我可以根据布局随时更改播放mp3文件。
感谢之前的帮助......
日志...
02-25 22:10:08.546 17345-17345 / com.echo.tesmediaplayer E / Dir: / storage / emulated / 0 02-25 22:10:08.548 17345-17345 / com.echo.tesmediaplayer E /目录:/ 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)在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1362)在 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) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
引起:java.lang。 IllegalStateExceptionat android.media.MediaPlayer._prepare(Native Method)at android.media.MediaPlayer.prepare(MediaPlayer.java:1158)at com.echo.tesmediaplayer.MainActivity.onCreate(的 MainActivity.java:48 ) 在android.app.Activity.performCreate(Activity.java:6279)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2393) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500) 在android.app.ActivityThread.access $ 900(ActivityThread.java:163)at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1362) 在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) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
答案 0 :(得分:0)
您是否正确设置了权限? 你需要:
text views
请参阅:https://developer.android.com/guide/topics/media/mediaplayer.html#manifest