我想在我的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”,而且,一切正常。)如果是这样,其他所有应用程序都可以定义一个与我的模块所需名称相同的权限,并欺骗我的应用程序。是吗?
任何人都可以提供帮助? 非常感谢!
答案 0 :(得分:7)
我得到了答案。
我自己的应用程序定义了其他应用程序使用的权限,必须先安装其他想要使用我的权限的应用程序。否则,必须重新安装这些应用程序才能使用我的权限。不需要其他操作或代码,只需<uses-permission android:name="my.apps.permission.my_permission" />
,与其他系统定义的权限相同。
并且,多个应用可能会定义具有相同名称的权限,相互冲突。第一个安装的应用程序占用冲突的权限名称,其他应用程序不会覆盖或更改原始权限。