我想在我的安卓应用中定义一个权限,让其他第三方应用使用。此权限用于限制调用我的模块。也就是说,第三方应用程序必须请求正确的权限才能调用我的模块,就像使用Android系统定义的系统权限一样,android.permission.INTERNET等等。
在我的测试中,我在我的应用程序中定义了权限,比如“my.apps.permission.my_permission”,然后将其安装在模拟器上。在我的一些 Activity 中,添加了 android:permission="my.apps.permission.my_permission"属性。此属性强制调用我的 Activity 的应用程序必须具有正确的权限“my.apps.permission.my_permission”。然后在测试应用程序中,请求 AndroidManifest.xml 中的权限,<uses-permission android:name="my.apps.permission.my_permission" />
问题是,在调用 startActivity() 时调用需要权限的 Activity 的测试应用程序中,我得到了一个 SecurityException:Permission Denied。但是,如果我在测试应用程序中定义了同名权限,则一切正常。
然后,以下是我的结论:
1)看来,我的应用程序中定义的权限“my.apps.permission.my_permission”对其他第三方应用程序不可见。如何让它可见,以便其他应用可以像Android系统中定义的那样使用我的权限?
2) 即使可见,Android 也不会检查名称冲突的用户定义权限。(我通过在测试应用程序中定义名称为“android.permission.INTERNET”的权限并覆盖系统定义的权限来对此进行测试,并在我的应用程序中要求“android.permission.INTERNET”,但仍然一切正常。)如果是这样,其他所有应用程序都可以定义一个与我的模块所需名称相同的权限,并欺骗我的应用程序。是吗?
有人可以帮忙吗? 非常感谢!
最佳答案
我得到了答案。
我自己的应用,它定义了其他应用使用的权限,必须先安装其他要使用我的权限的应用。否则,必须重新安装这些应用程序才能使用我的权限。不需要其他操作或代码,只需 <uses-permission android:name="my.apps.permission.my_permission" />
, 与其他系统定义的权限相同。
并且,多个应用程序可能会定义具有相同名称的权限,从而相互冲突。第一个安装的应用占用冲突的权限名称,其他应用不会覆盖或更改原始权限。
关于android - 定义第三方应用程序在 Android 中使用的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4567812/