簡體   English   中英

來自外部存儲的 Uri 上的 MediaPlayer 為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM