调用 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());
基本上我想要的是允许用户从他们的设备 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());