Android 通知声音未播放。拒绝许可
自定义通知声音不工作。来自内部存储的声音,文件所有者不是我的应用程序 代码: 错误:Android 通知声音未播放。拒绝许可,android,notifications,Android,Notifications,自定义通知声音不工作。来自内部存储的声音,文件所有者不是我的应用程序 代码: 错误: java.lang.SecurityException: Permission Denial: reading com.android.fileexplorer.provider.FileExplorerFileProvider uri content://com.android.fileexplorer.myprovider/external_files/zedge/notification_sound/Ma
java.lang.SecurityException: Permission Denial: reading com.android.fileexplorer.provider.FileExplorerFileProvider uri content://com.android.fileexplorer.myprovider/external_files/zedge/notification_sound/Marbles.mp3 from pid=1874, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:616)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:483)
at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:474)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:419)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:313)
at android.os.Binder.execTransact(Binder.java:569)
2018-11-11 16:08:20.613 756-15193/? E/MediaPlayerService: Couldn't open fd for content://com.android.fileexplorer.myprovider/external_files/zedge/notification_sound/Marbles.mp3
2018-11-11 16:08:20.613 1874-23378/? E/MediaPlayer: Unable to create media player
明斯克版本21
如何修复它
UPD:
我在“urisound=Uri.parse(account.notifySound);”之后添加了:
并得到一个错误:
java.lang.SecurityException: Uid 10204 does not have permission to uri 0 @ content://com.android.fileexplorer.myprovider/external_files/zedge/notification_sound/Marbles.mp3
UPD2:
铃声选择器打开了多个声音浏览器,如“音乐”,“主题”,再次“音乐”-另一个声音浏览器,不同的第一个“音乐”
当我在“音乐”中选择声音时,选择soundUri=:
content://com.android.fileexplorer.myprovider/external_files/zedge/notification_sound/Snapchat_Tone-04a0409e-68c4-4294-beb3-bb137b8d5886.mp3
在“主题”中选择声音时:
file:///storage/emulated/0/MIUI/.ringtone/Snapchat_Tone-04a0409e-68c4-4294-beb3-bb137b8d5886.mp3
此声音在Uri以“文件://”(声音资源管理器“主题”)开头时播放,在Uri以“内容://”(声音资源管理器“音乐”)开头时出错
虽然在“音乐”中选择时会播放一些其他文件,但Uri开头为“content://...“正如编译器所说:
要求导出提供程序或grantUriPermission()
你可以试试这个:
grantUriPermission("com.android.systemui", sound,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
其中sound
是与setSound()一起使用的Uri
如果您不能确定哪些程序包应授予权限,则下面的帮助程序函数将循环搜索:
public static void grantUriPermission(Activity ctx, Intent intent, Uri uri, int permissionFlags) {
List<ResolveInfo> resolvedIntentActivities = ctx.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolvedIntentInfo : resolvedIntentActivities) {
String packageName = resolvedIntentInfo.activityInfo.packageName;
ctx.grantUriPermission(packageName, uri, permissionFlags);
}
}
publicstaticvoidgranturipermission(活动ctx、意图Intent、Uri、int-permissionFlags){
List resolvedIntentActivities=ctx.getPackageManager().queryIntentActivities(仅限intent、PackageManager.MATCH_DEFAULT_);
对于(ResolveInfo resolvedIntentInfo:resolvedIntentActivities){
字符串packageName=resolvedIntentInfo.activityInfo.packageName;
ctx.grantUriPermission(packageName、uri、permissionFlags);
}
}
我添加了grantUriPermission,但出现了错误。我更新了我的问题
grantUriPermission("com.android.systemui", sound,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
public static void grantUriPermission(Activity ctx, Intent intent, Uri uri, int permissionFlags) {
List<ResolveInfo> resolvedIntentActivities = ctx.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolvedIntentInfo : resolvedIntentActivities) {
String packageName = resolvedIntentInfo.activityInfo.packageName;
ctx.grantUriPermission(packageName, uri, permissionFlags);
}
}