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