【问题标题】:Define a permission for third-party apps to use in Android定义第三方应用在 Android 中使用的权限
【发布时间】:2010-12-31 03:05:02
【问题描述】:

我想在我的 Android 应用中定义一个权限,并让其他第三方应用使用。此权限用于限制调用我的模块。即第三方应用必须请求正确的权限才能调用我的模块,就像使用Android系统定义的系统权限,android.permission.INTERNET等一样。

在我的测试中,我在我的应用程序中定义了权限,例如“my.apps.permission.my_permission”,然后将其安装在模拟器上。在我的一些活动中,添加了 android:permission="my.apps.permission.my_permission" 属性。此属性强制调用我的活动的应用程序必须具有正确的权限“my.apps.permission.my_permission”。然后在一个测试应用中,在AndroidManifest.xml中请求权限,<uses-permission android:name="my.apps.permission.my_permission" />

问题是,在测试应用程序中,它将调用我需要权限的活动,当我调用 startActivity() 时,我得到了一个 SecurityException : Permission Denied。但是,如果我在测试应用中定义了同名的权限,一切正常。

以下是我的结论:

1) 我的应用程序中定义的权限“my.apps.permission.my_permission”似乎对其他第三方应用程序不可见。如何让它可见,以便其他应用可以像Android系统中定义的一样使用我的权限?

2) 即使是可见的,Android 也不会检查名称冲突的用户定义权限。(我通过在测试应用程序中定义名称为“android.permission.INTERNET”的权限并覆盖系统定义的权限来测试这一点,并在我的应用程序中要求“android.permission.INTERNET”,但一切正常。)如果是这样,每个其他应用程序都可以定义一个与我的模块所需名称相同的权限,并欺骗我的应用程序。对吗?

有人可以帮忙吗? 非常感谢!

【问题讨论】:

标签: android permissions


【解决方案1】:

我得到了答案。 我自己的应用程序,它定义了其他应用程序使用的权限,必须在其他想要使用我权限的应用程序之前安装。否则,必须重新安装这些应用程序才能使用我的权限。无需其他操作或代码,只需<uses-permission android:name="my.apps.permission.my_permission" />,与其他系统定义的权限相同。

而且,多个应用程序可能会使用相同的名称定义权限,但会相互冲突。第一个安装的应用占用冲突的权限名称,其他应用不会覆盖或更改原来的权限。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2018-06-03
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
相关资源
最近更新 更多