activity的permission

    一般的,在应用程序中能够很方便的通过包名+activity的类名,或者action、data启动其他应用程序中的页面。如果你不希望自己应用的某些页面随便被别人调起,则可以考虑添加必要的权限。
    使用系统的某些功能,我们一般都会在AndroidManifest.xml中声明所需要的权限,<uses-permission ---------/>;同样,我们也可以为自己的activity声明权限。android权限定义格式如下:
<permission android:description="string resource"
            android:icon="drawable resource"
            android:label="string resource"
            android:name="string"
            android:permissionGroup="string"
            android:protectionLevel=["normal" | "dangerous" | 
                                     "signature" | "signatureOrSystem] />
    其中icon和label是在询问用户是否允许安装时,显示的图片和名称;关键的是name,即在uses-permission时声明使用的权限;protectionLevel声明的包含级别。android定义的权限有四种级别,分别是:"normal"、"dangerous"、"signature"、"signatureOrSystem"
normal:最低级别,不需要经过用户的允许,使用uses-permission之后,直接由系统授权给请求者。其用处可能就是防止其他应用query可用activity时,找到这个activity吧;
dangerous:比normal稍微高一些,在安装时会显示出来,且需要经过用户允许
signature:需要相同的签名,而且不需要经过用户的允许;
signatureOrSystem:其实和signature类似,只不过给厂商们的应用调用系统应用开了条路
    在我们需要控制权限的activity的声明中加入android:permission,照着保护等级使用即可,但想尝试几个问题
1.signature真的是只签名相同才能打开么?能否用am命令直接调起,如果再有root权限呢?
(1)先给我们的启动activity加上签名权限(该activity具有android.intent.category.LAUNCHER)。发现安装应用后,应用icon正常,显示,但是点击后,提示应用未安装;看来系统是无权启动该activity了
(2)am命令可以直接调起普通的activity,具体的可以在adb shell后输入am命令,了解基本的命令参数。am start -n 包名/完整activity类名 启动指定activity。但是随便给activity加个权限就会遇到java.lang.SecurityException: Permission Denial的错误。执行su命令,再次am start发现activity已经启动,而且不管什么级别都没有用。
2.如果两个apk都启了相同的permission名,会不会有问题?能否从一个apk调用另外一个有权限的呢?
(1)首先两个应用能同时安装上,只要包名不相同

(2)其次权限声明之间不会相互冲突,应该还是依赖与应用的包名的。

参考:http://www.arainfo.cn/?p=217

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值