栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

来自文件提供商Uri的Android 7.0通知声音未播放

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

来自文件提供商Uri的Android 7.0通知声音未播放

以下是我刚刚发表的博客文章,此处转载是因为,为什么呢?


您可以

Notification
通过on之类的方法
setSound()
在上添加自定义铃声
NotificationCompat.Builder
Uri
正如Stack
Overflow上
的一些人所报道的那样,这需要一个,并在Android
7.0上引起问题 。

如果您使用

file:
Uri
的价值观,他们不再在Android
7.0的工作,如果你
targetSdkVersion
是24或更高,因为声音
Uri
是检查是否符合在禁令
file:

Uri
值。

但是,如果您尝试使用

content:

Uri
from等功能
FileProvider
,则您的声音将无法播放…,因为Android没有对该内容的读取权限。

以下是解决此问题的一些选项。

手术刀:

grantUriPermissions()

您始终可以通过上

grantUriPermissions()
的方法向其他应用授予内容权限
Context
。挑战在于知道要向 授予权限。

在Nexus 6P(Android 6.0 …仍…)和Nexus 9(Android 7.0)上可以使用的功能是:

grantUriPermission("com.android.systemui", sound,    Intent.FLAG_GRANT_READ_URI_PERMISSION);

(这里

sound
Uri
你使用的是带有
setSound()

我不能说这是否适用于所有设备和所有Android OS版本。

断头台:没有更多的用户文件

android.resource
作为一种方案,对于的
Uri
值可以很好地工作
setSound()
。与其允许用户从文件中选择自己的铃声,不如让他们选择您作为应用程序中的原始资源提供的几种铃声之一。但是,如果这表示丧失了应用程序功能,则您的用户可能会不满意。

轴:使用自定义

ContentProvider

FileProvider
导出时无法使用-启动时崩溃。但是,在这种情况下,唯一
content:

Uri
不会出现其他问题的方法就是提供者所在的位置
exported
,并且没有读取访问权限(或者恰好需要某种权限,
com.android.systemui
或者恰好持有该权限
)。

最后,我会为这个选项添加到 我的

StreamProvider
,因为一些“只读”提供功能的一部分。

但是,您可以为此选择自己的提供商。

电锯:禁止禁令

以下代码段阻止了所有

StrictMode
与VM行为有关的检查(即,除主应用程序线程行为外的其他检查),包括对
file:
Uri
值的禁止:

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().build());

另外,您可以使用自己

VmPolicy
想要的任何规则来配置自己,而无需调用
detectFileUriExposure()

这使您可以

file:
Uri
在任何地方使用值。Google禁止使用的理由很充分
file:

Uri
,因此从长远来看,尝试避免使用该禁止措施可能会咬伤不幸的身体部位。

核弹:低一点

targetSdkVersion

这也消除了对

file:

Uri
价值的禁止,以及
targetSdkVersion
24岁以上的孩子选择参加的所有其他行为。值得注意的是,
Toast

如果用户进入分屏多窗口模式,这将导致您的应用显示“可能无法使用分屏” 。

真正的解决方案:Android中的修复程序

NotificationManager
应呼吁
grantUriPermissions()
对我们来说,还是应该给我们一些其他的方式,以联想
FLAG_GRANT_READ_URI_PERMISSION
Uri
我们使用自定义
Notification
声音。
敬请期待进一步的发展。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610366.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号