在MediaPlayer中打开content:// media / external / [...]所需的READ_EXTERNAL_STORAGE权限?

时间:2017-08-10 21:22:45

标签: android permissions android-mediaplayer android-contentprovider android-external-storage

我在我的应用程序中播放闹钟声音。在大多数设备上,这都可以完美运行。一些用户已经描述过没有声音在播放。这似乎主要影响三星和华为设备。这是事情失败的最小例子:

save-event

对于受影响的用户,将引发以下异常:

  

异常java.io.IOException:setDataSource失败:   状态= 0x80000000的

这似乎只发生在alarmURI如下所示:cumsum(save-event) # [1] 0.5 1.0 1.5 1.0 1.5 ,即它驻留在外部商店。当alarmURI看到这个alarmUri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); try { if(!mediaPlayer.isPlaying()) { mediaPlayer.setDataSource(this, alarmUri); AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); mediaPlayer.setAudioStreamType(audioManager.STREAM_ALARM); mediaPlayer.setLooping(true); mediaPlayer.prepare(); mediaPlayer.start(); } } catch(Exception e) { Log.d(logtag,"Exception: " + e); } 时,我从未见过它。

如果我使用的Uri包含content://media/external/audio/media/11部分,是否需要content://media/internal/audio/media/40权限才能播放声音?还是我错过了别的什么?通常情况下,如果权限是问题,我会期望抛出SecurityException。

/ e:我可以在我的设备上重现该错误。这是一个更详细的错误报告:

  

异常java.lang.SecurityException:Permission Denial:读取   com.android.providers.media.MediaProvider uri   content://来自pid的媒体/外部/音频/媒体= 27158,uid = 10177   需要android.permission.READ_EXTERNAL_STORAGE,或   grantUriPermission()

0 个答案:

没有答案