【问题标题】:How to require multiple permissions to launch or bind to a Service如何要求多个权限来启动或绑定到服务
【发布时间】:2013-12-12 18:28:55
【问题描述】:

根据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 服务可以有多个权限,但权限是 在应用程序级别授予,而不是在服务级别授予。

但他接着解释了&lt;uses-permission&gt; 属性,这不是我想要的。 Another answer 进一步降低了我的希望。看来这确实是不可能的。

如果是这种情况,我正在考虑的替代方法是为我需要的每个权限提供一项服务,并让它们都作为负责执行这项工作的实际服务的转发器。有更好的主意吗?

【问题讨论】:

    标签: android permissions


    【解决方案1】:

    真的是这样吗?

    就清单中的自动保护而言,是的。这是 99.9% 的情况。

    有没有办法规避这个问题?

    检查 Java 代码中的其他权限,使用 like checkCallingPermission()

    然后他继续解释不是我想要的属性。

    正确。

    我正在考虑的替代方法是为我需要的每个权限提供一项服务,并让它们都作为负责执行工作的实际服务的转发器。

    这只有在您尝试对权限进行逻辑 OR 时才有意义,其中调用者必须具有权限 X 权限 Y。直到您提出问题的这一点,我有假设您想要对权限进行逻辑与(调用者必须持有权限 X 权限 Y)。

    我想不出什么情况下传入权限的逻辑 OR 会有用,更不用说必要了。话虽如此,如果您将命令模式与startService() 一起使用,不导出“真实”服务,并且在从导出的服务转发命令后调用stopSelf(),则您的解决方法应该有效。如果您的愿景是使用这种绑定模式的代理方法,请使用bindService(),请$DEITY 怜悯您的灵魂,因为您将需要它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多