我创建了一个闹钟应用程序。警报触发后,我想在 MediaPlayer 中播放音频。 MediaPlayer 已创建并使用默认铃声成功运行,但如果从外部存储中选择音频文件,则保持null
。
我已在 list 中提供以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
BroadcastReciever
类中mediaPlayer
设置的代码:
@Override
public void onReceive(Context context, Intent intent) {
try {
alarm_tone = Uri.parse(intent.getStringExtra("alarm_tone"));
}catch (Exception ex){
alarm_tone = Settings.System.DEFAULT_RINGTONE_URI;
}
Log.d("Uri", "Alarm tone recieved: " + (alarm_tone)); //result: OK
MediaPlayer mediaPlayer=MediaPlayer.create(context, alarm_tone);
mediaPlayer.setScreenOnWhilePlaying(true); //gives null pointer exception on this line in case of external Uri,, i.e. mediaPlayer is null in this case
mediaPlayer.setLooping(true);
mediaPlayer.start();
}
以下是我的 Activity 代码,我在其中选择音频文件并使用 Intent 将其 Uri 数据发送到 BroadcastReciever
类:
btnRingTone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 10);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK && requestCode == 10){
ringTone=data.getData();
}
}
public void setAlarm(){
Intent i=new Intent(this, AlarmReciver.class);
i.putExtra("alarm_tone", ringtone.toString());
...
}
音频文件选择成功。 AlarmReciever
类中也成功接收了 Uri
。但是 MediaPlayer
实例不是用它创建的。
最佳答案
Android 可能不支持您要播放的文件。 尝试使用不同的文件并检查此问题的答案:Android MediaPlayer.Create() returns null
关于java - 来自外部存储的 Uri 上的 MediaPlayer 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59712828/