android系统权限SET_PREFERRED_APPLICATIONS怎么获取

点背 2013-02-20 07:34:49
最近自己写个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,但运行有发现也没有弹框请求权限)
...全文
499 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zj_xinwujun 2013-09-11
  • 打赏
  • 举报
回复
楼主,我最近也有类似的需求,我查了资料,得出如下结论,楼主看看对不对。 1.SET_PREFERRED_APPLICATIONS在高版本中已经废弃,所以根本无法利用它修改系统默认程序 <!-- @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" /> 2.系统签名需要和用户手机机器匹配的signapk.jar、platform.pk8、platform.x509.pem重新签名才行,因此,打上系统签名不切实际。
点背 2013-02-21
  • 打赏
  • 举报
回复
今天Google了下,又学到知识了 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 权限等级办法
点背 2013-02-21
  • 打赏
  • 举报
回复
终于找到了查看permission 具体信息的方法了 在Android源码 frameworks/base/core/res /AndroidManifest.xml中

    <!-- @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 目录下也可以获取该权限

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧