来自外部存储的 Uri 上的 MediaPlayer 为空
MediaPlayer is null on a Uri from external storage
我创建了一个闹钟应用程序。警报响起时,我想在 MediaPlayer
中播放音频。已创建 MediaPlayer 并 运行 成功使用 默认铃声 但如果从外部存储中选择音频文件,则保持 null
。
我在清单中提供了以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
mediaPlayer
设置里面的代码BroadcastReciever
class:
@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 的代码,我在其中选择音频文件并使用意图将其 Uri 数据 发送到 BroadcastReciever
class :
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
class 中成功接收。但是 MediaPlayer
实例不是用它创建的。
android可能不支持您要播放的文件。
尝试使用不同的文件并检查此问题的答案:Android MediaPlayer.Create() returns null
我创建了一个闹钟应用程序。警报响起时,我想在 MediaPlayer
中播放音频。已创建 MediaPlayer 并 运行 成功使用 默认铃声 但如果从外部存储中选择音频文件,则保持 null
。
我在清单中提供了以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
mediaPlayer
设置里面的代码BroadcastReciever
class:
@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 的代码,我在其中选择音频文件并使用意图将其 Uri 数据 发送到 BroadcastReciever
class :
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
class 中成功接收。但是 MediaPlayer
实例不是用它创建的。
android可能不支持您要播放的文件。 尝试使用不同的文件并检查此问题的答案:Android MediaPlayer.Create() returns null