调用 mediaPlayer.start() 时出现空指针异常:Android

Null Pointer Exception when calling mediaPlayer.start() : Android

基本上我想要的是允许用户从他们的设备 select 一个音频文件,一旦他们这样做,这个 activity 就会启动并且 music/audio 文件将被播放。为此,我在我的 Android 清单文件中使用了一个 intent-filter,它工作正常,没有错误。

问题是当我调用 mediaPlayer.start() 时出现空指针异常。到目前为止,据我所知,发生这种情况是因为 MediaPlayer 无法创建对象或其他东西...... MediaPlayer.cretae() returns null.

下面是这个Activity的全部代码:

public class IntentPlayerActivity extends AppCompatActivity {

    TextView song_name,artist_name;
    ImageView playPauseBtn;
    SeekBar seekBar;

    static Uri uri;
    static MediaPlayer mediaPlayer = new MediaPlayer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent_player);

        initViews();
        Intent intent = getIntent();
        if (intent.getAction().equals(Intent.ACTION_VIEW)){

            Log.d("Intent Player_Activity:", " File Path: "+ intent.getData().getPath());

            playPauseBtn.setImageResource(R.drawable.ic_pause_circle_outline);
            uri = Uri.parse(intent.getData().getPath());
            Log.d("Intent Player_Activity:", " URI: "+uri.toString());

            if (mediaPlayer != null){
                mediaPlayer.stop();
                mediaPlayer.release();
                mediaPlayer = MediaPlayer.create(getApplicationContext(),uri);
                mediaPlayer.start();
            }else {
                mediaPlayer = MediaPlayer.create(getApplicationContext(),uri);
                mediaPlayer.start();
            }
        }
    }

    private void initViews() {
        song_name = findViewById(R.id.song_name);
        artist_name = findViewById(R.id.song_artist);
        playPauseBtn = findViewById(R.id.play_pause);
        seekBar = findViewById(R.id.seekBar);
    }
}   

我希望有人能解释一下 MediaPlayer.create() 剂量以及可能导致它失败的原因,就我而言,我不认为音频文件是无效格式或指定的媒体文件不能成立。我觉得是别的。

删除:

uri = Uri.parse(intent.getData().getPath());

相反,将 intent.getData() 传递给 MediaPlayer.create()

mediaPlayer = MediaPlayer.create(getApplicationContext(),intent.getData());