【发布时间】:2023-04-07 23:13:01
【问题描述】:
我创建了一个闹钟应用。发生警报时,我想在MediaPlayer 中播放音频。 MediaPlayer 已创建并使用默认铃声成功运行,但在从外部存储中选择音频文件的情况下仍保持null。
我在清单中提供了以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
mediaPlayer 的代码设置在BroadcastReciever 类中:
@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();
}
以下是我选择音频文件并使用意图将其 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());
...
}
音频文件选择成功。 Uri 在AlarmReciever 类中也成功接收。但是 MediaPlayer 实例不是用它创建的。
【问题讨论】:
标签: java android broadcastreceiver uri android-mediaplayer