根据docs,Android清单文件可以使用Service
的以下语法:
<service android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:isolatedProcess=["true" | "false"]
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</service>
权限属性特别指定:
实体必须拥有的权限的名称 启动服务或绑定它。
但似乎我不能请求实体启动我的服务的多个权限。那是真的吗?无论如何都要绕过这个?
在Stackoverflow上,我发现的最接近的是this answer作者说:
Android服务可以拥有多个权限,但权限是 在应用程序级别授予,而不是在服务级别授予。
然后他继续解释<uses-permission>
属性,这不是我想要的。 Another answer进一步降低了我的希望。这似乎确实不可能。
如果是这种情况,我正在考虑的替代方案是为我需要的每个权限提供一项服务,并使它们全部作为负责执行工作的实际服务的转发器。还有更好的主意吗?
答案 0 :(得分:3)
真的是这样吗?
在清单中的自动保护方面,是的。这是99.9%的情况。
无论如何都要绕过这个?
使用like checkCallingPermission()
的内容检查Java代码中的其他权限。
然后他接着解释了我不想要的属性。
正确。
我正在考虑的替代方案是为我需要的每个权限提供一项服务,并使它们全部作为负责执行工作的实际服务的转发器。
只有在尝试对权限进行逻辑OR时才有意义,调用者必须拥有权限X 或权限Y.直到问题中的这一点,我有假设你想要权限上的逻辑AND(调用者必须持有权限X 和权限Y)。
我无法想象一个场景,其中传入权限的逻辑OR将是有用的,更不用说必要了。话虽这么说,如果您使用命令模式startService()
,不导出“真实”服务,并且在从导出的服务转发命令后调用stopSelf()
,则解决方法应该有效。如果你的愿景是使用这种代理方法和绑定模式,使用bindService()
,可能会$DEITY
怜悯你的灵魂,因为你需要它。