android自定义权限可能出现的问题

为了方便描述,这里先定义两个app的名字:
调用方:A
被调用方:B
A调用B的Activity名字:AActivity
被调用方的Activity名字:BActivity
一个很可能出现的异常:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=xxx/.xxx.BActivity } from null (pid=3202, uid=2000) requires xxx.permission

在B的manifest.xml的manifest标签里定义自定义权限(signature代表同样签名的app才可以调用)

<permission
        android:name="xxx.permission"
        android:label="权限描述"
        android:permissionGroup="权限组名,随便写"
        android:protectionLevel="signature"/>

还需要在B的manifest.xml里写上类似下面的代码,注意最好添加android:exported="true",虽然如果intent-filter下面有action会默认android:exported为true,但是最好还是写上,因为即使有action也可以将android:exported设置为false的
(例如这里叫BActivity)
(如果需要隐藏这个app的图标,就添加类似下面的data属性)

<activity
  android:name=".BActivity"
  android:exported="true">
  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
    <data
        android:host="随便写"
        android:scheme="随便写" />
  </intent-filter>
</activity>

然后在A的manifest.xml的manifest标签里写上,否则如果先安装A再安装B会出现上面说的授权错误

<uses-permission android:name="xxx.permission"/>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,608评论 25 708
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 5,765评论 2 51
  • 哎呀呀 ,马上就要面临找工作了,媛媛心里紧张呀. 作为一个即将毕业的Android程序媛,开始面临找工作了,...
    左神话阅读 4,896评论 7 59
  • 现在的孩子真的很可怜,他们不是单纯承担着学习压力,主要还是承担着家庭三代人的期望。现在的父母不知道在想些什么,居然...
    简单最上乘阅读 341评论 0 0
  • 简介 以前写了一个软件,叫音乐计步器,在腾讯的应用宝可以下载,当时测试没问题,服务器用的免费的Bmob云,但是后来...
    世外大帝阅读 916评论 0 15