为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android中使用自定义权限?

如何在Android中使用自定义权限?

HUH函数 2019-12-17 15:26:20
我有两个应用程序。一种是声明许可并拥有一个Activity:部分的AndroidManifest.xml<application    android:icon="@drawable/ic_launcher"    android:label="@string/app_name"    android:permission="your.namespace.permission.TEST" >    <activity        android:name=".DeclaringPermissionActivity"        android:label="@string/app_name" >        <intent-filter>            <action android:name="android.intent.action.MAIN" />            <category android:name="android.intent.category.LAUNCHER" />        </intent-filter>        <intent-filter>          <action android:name="android.intent.action.VIEW" />          <category android:name="android.intent.category.DEFAULT" />          <category android:name="android.intent.category.BROWSABLE" />          <data android:scheme="myapp"             android:host="myapp.mycompany.com" />         </intent-filter>     </activity></application>第二个声明使用权限部分的AndroidManifest.xml<uses-sdk android:minSdkVersion="10" /><uses-permission android:name="your.namespace.permission.TEST" /><application的一部分Activity:public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("myapp://myapp.mycompany.com/index")));}我正在安装声明权限的应用程序,然后运行第二个应用程序。结果我得到了安全异常: 01-11 09:46:55.249: E/AndroidRuntime(347): java.lang.RuntimeException: Unable to start activity ComponentInfo{your.namespace2/your.namespace2.UsingPErmissionActivity}: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW dat=myapp://myapp.mycompany.com/index cmp=your.namespace/.DeclaringPermissionActivity } from ProcessRecord{407842c0 347:your.namespace2/10082} (pid=347, uid=10082) requires your.namespace.permission.TEST
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您需要通过专门声明在基本应用的清单中创建权限。例如:


<permission android:name="your.namespace.permission.TEST"

    android:protectionLevel="normal" android:label="This is my custom  permission" />

然后在所需的应用程序中将其用作:


<uses-permission android:name="your.namespace.permission.TEST" />

注意: 保持具有自定义权限的应用程序安装顺序至关重要。即你必须需要安装该应用程序首先它声明的许可,并在以后安装一个,这使得使用它。此顺序的任何中断都可能破坏自定义的使用。权限。


查看完整回答
反对 回复 2019-12-17
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

如答案中所述,您还应该考虑安装应用程序的顺序。


这很重要,因为:


如果请求权限的应用程序(应用程序B)安装在定义权限的应用程序(应用程序A)之前,则特定设备中将没有这样定义的权限,因此操作系统根本不会要求该权限。


稍后,当您安装App A并尝试运行App B时,后者将无法访问安全组件。


一种解决方法是在应用程序A和B中定义相同的自定义权限,以确保无论先安装哪个应用程序,该设备中都存在该权限,因此,在安装应用程序A时,该权限将已经已授予AppB。


但是在那种情况下,您应该确保两个声明中的保护级别都相同,因为这可能导致安全风险。


(请注意,从android 5.0开始,您不能在多个App中定义相同的权限,除非这些App是使用相同的签名密钥签名的)。


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信