android系统权限SET_PREFERRED_APPLICATIONS如何获取
最近自己写个demo,需要用到SET_PREFERRED_APPLICATIONS权限
在网上找了半天,大概有两种方式:
1、 将手机root后,把apk强行push到system/app目录下,重启手机
2、SET_PREFERRED_APPLICATIONS是系统权限,需要有系统的shareUserID和签名
第一种尝试过,不行
第二种方式,因为用的是自己公司的手机,知道一种shareUserId和签名,
但是发现只有一部手机可用,其他手机都不能用
提示错误:
java.lang.SecurityException: Neither user 10020 nor current process has android.permission.SET_PREFERRED_APPLICATIONS
那么在心里产生几个疑问:
1、 系统签名 的作用是什么,最主要的作用是为了获取系统权限?
假如是的话,那么我所知道的shareUserId和签名应该权限不够,不足以获取到
SET_PREFERRED_APPLICATIONS 权限
2、 root之后将第三方签名的apk,强行push到system/app目录下和安装在data/app有什么不同?据我了解拥有系统签名和shareUserId的apk会安装在system/app目录下,那么没有系统签名的apk安装到system/app目录下功能是否和拥有系统签名和shareUserId的apk安装后的功能一样?
3、 比如说静默安装,需要系统权限吧(具体什么权限我也不知道,后续去google),想360手机助手、 豌豆夹等市场都有在手机root之后可以实现静默安装的功能,那么它们的系统权限(静默安装)是怎么获取的?(为了获取SET_PREFERRED_APPLICATIONS,我特意将手机root,但运行有发现也没有弹框请求权限)
android权限等级分为四种:
["normal" | "dangerous" | "signature" | "signatureOrSystem"]
其中normal 和dangerous是一般apk都在Mainifest中声明即可获取的
signature必须要有系统级别的签名才能够获取到
signatureOrSystem 有系统级别签名或者有系统权限
系统权限应该是安装在/system/app的apk获取,(而具有系统级别的签名也会安装在/system/app目录下,)
如果要用到第三种 "signature"权限,那么即使你root之后强制吧apk push到/system/app
目录下重启手机后也是无法获取到该权限的(这种方式可以获取到第四种权限"signatureOrSystem",具体权限3和4之间是交集关系还是包含关系,我也没弄懂 :( )
现在我怀疑 SET_PREFERRED_APPLICATIONS 权限属于 第三种--"signature" 权限,必须得有系统的签名才能获取,我想验证下我猜想的是否正确,但苦于现在还没找到如何查看 SET_PREFERRED_APPLICATIONS 权限等级办法
在Android源码 frameworks/base/core/res /AndroidManifest.xml中
1
2
3
4
5
6
7
8
|
<!-- @deprecated No longer useful, see
{ @link android.content.pm.PackageManager#addPackageToPreferred}
for details. -->
<permission android:name= "android.permission.SET_PREFERRED_APPLICATIONS"
android:permissionGroup= "android.permission-group.SYSTEM_TOOLS"
android:protectionLevel= "signature"
android:label= "@string/permlab_setPreferredApplications"
android:description= "@string/permdesc_setPreferredApplications" />
|
果然 SET_PREFERRED_APPLICATIONS 等级为 signature
PS:
1、 静默安装也可通过获取root权限,然后再代码中通过调用执行命令行的语句:pm install /sdcard/**.apk 来实现,
2、 安装需要的权限:android.permission.INSTALL_PACKAGES 经过查实 等级确实为signature|system,
也就是说在无系统签名的情况下,强制将apk, push到/system/app 目录下也可以获取该权限
相关推荐
- Android获取系统时间
- Android-day02 1.测试的相关概念 (了解) 2.单元测试(了解,会用即可) 3.Logcat日志猫工具的使用 (会用即可) 4.把数据存储到文件(login案例) android 下的数据存储 5.存储到SD卡,获取SD的大小及可用空间 (重点) 7.文件的权限概念 (了解) 8.SharedPreferences介绍 (重点) 用来做数据存储 9 生成xml的2种方式 10.使用pull解析xml格式的数据
- c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息
- Android:用EasyPermissions快速获取权限
- CentOS 7安装Zabbix 3.4 01、最小化安装操作系统 02、升级系统组件到最新版本 03、关闭 SELinux 04、关闭防火墙 05、获取SQL源 06、安装 Zabbix 所需软件支持包 07、设置 MySQL 参数(8GB 内存为例) 08、启动 MySQL 09、获取 MySQL 的 root 初始密码 10、进行 MySQL 安全配置,配置开始时会用到第 09获取的初始密码,建议修改为自定义密码,其它选项选择 y 即可 11、重启 MySQL 12、配置 MySQL 中 zabbix要的库和账号权限 13、安装 Zabbix源 14、安装zabbix 15、导入 zabbix 所需信息 16、配置 zabbix 参数 17、配置 Apache 中的 PHP 参数(8GB 内存为例):
- android面试题-简答题(一) 答:apk 获取system权限;如何获取如下: 解释连接:http://blog.csdn.net/superkris/article/details/7709504 3、谈谈Android的IPC(进程间通信)机制 4、apk安装卸载的原理 5、如何做适配 1)android有H、L、M、X、XX四个不同的文件夹存放不同分辨率的图片,系统会自动加载 6、是否进行过apk反编译,如何防止反编译 反编译: 防止反编译: 7、Android的动画分类以及两种动画的阐述 8、AIDL全称,如何工作,可处理那些数据 答:AIDL的英文全称是Android Interface Define Language当A进程要去调用B进程中的service时,并实现通信,我们通常都是通过AIDL来操作的A工程:首先我们在net.blogjava.mobile.aidlservice包中创建一个RemoteService.aidl文件,在里面我们自定义一个接口,含有方法g
- 系统用户权限,系统权限位,用户相关命令 1 如何让普通用户拥有root用户的能力 2 系统特殊权限位 3 用户相关命令 4 passwd 修改用户密码信息 5 chown:修改文件属主和属组
- android fragment中如何直接获取app版本号
- android某一项权限被用户禁用,如何判断状态
- 用js如何获取获取操作系统安装时间和获取硬盘信息
- 菜鸟求解指针异常
- ExpandableListView批改group图标