MediaPlayer在来自外部存储的Uri中为空

问题描述 投票:1回答:1

我创建了一个警报应用。发生警报时,我想在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
1个回答
0
投票

Android可能不支持您要播放的文件。尝试使用其他文件,然后检查以下问题的答案:Android MediaPlayer.Create() returns null

© www.soinside.com 2019 - 2024. All rights reserved.