[英]MediaPlayer is null on a Uri from external storage
我創建了一個警報應用程序。 發生警報時,我想在MediaPlayer
播放音頻。 MediaPlayer 使用默認鈴聲創建並成功運行,但在從外部存儲中選擇音頻文件的情況下保持為null
。
我在清單中提供了以下許可:
<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();
}
以下是我選擇音頻文件並使用意圖將其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() 返回 null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.