从存储中播放mp3的最简单方法

时间:2017-02-25 15:36:38

标签: java android

我是新手。我只是想在我的应用程序中播放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)

1 个答案:

答案 0 :(得分:0)

您是否正确设置了权限? 你需要:

text views

请参阅:https://developer.android.com/guide/topics/media/mediaplayer.html#manifest

相关问题