我创建了一个警报应用。发生警报时,我想在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
实例不是随其创建的。
Android可能不支持您要播放的文件。尝试使用其他文件,然后检查以下问题的答案:Android MediaPlayer.Create() returns null