利用PackageManager做一个禁用某个系统应用的功能
来源:互联网 发布:圣山 知乎 编辑:程序博客网 时间:2024/05/17 22:07
不积跬步无以至千里
一、需求
如果我们想要禁用掉一个系统应用,不想再让他本身被打开,并且不想让它被别的应用调起来(情景:例如浏览器,本身点图标,你不想打开此应用,而且你在qq里打开一个网址,会调用到浏览器,你也不想让他打开浏览器)。这时候就是我们要做的功能。我们这次以浏览器锁定为例,如图:
二、代码
可以看出我们是一个CheckBox,因此需要存值我们用到了Setting的provider对此功能的值的存取
代码如下:
其中Settings.java的路径为:android\frameworks\base\core\java\android\provider\Settings.java
这里是代码实现的地方:
set:
get:
通过get来获取目前浏览器锁定的状态,通过set用来当按钮改变时候来存储状态值,并去发送一个广播给Browser内的一个广播接受者,具体的逻辑在那里实现。(为什么要把这个逻辑放到Browser里面,小编测试过了,如果你在外部实现禁用会出现权限问题)
如图:
这是操作禁用代码:
为什么会提示权限问题的代码:(代码的路径为:frameworks/base/services/java/com/android/server/pm/PackageManagerService.java)
在这里,他是想让你在同一个app里操作这个应用的禁用,所以会根据你的uid,判断是不是一个app在做这个操作。
因此,可以看出,系统想让自身来管理自己(从Camera中的DisableCameraReceiver也可以看出),所以我们只能在浏览器的内部写一个广播接收者。
当然要先自定义一个广播接收者
因为我这里开机的时候也想把这个操作设置上,所以加上了开机广播(注意开机广播需要权限,不仅需要action)
然后通过匹配action做操作,可以看出先去获取不同的action,其中一个action就是咱们上边发送广播到浏览器这个广播接收者的,然后获取Settings的值。
接下来咱们看一下disableComponent这个方法代码如下:
禁止代码主要就是用的PackageManager的setCompentEnableSetting方法。
- 利用PackageManager做一个禁用某个系统应用的功能
- 利用PackageManager获取应用版本号
- PackageManager的功能
- PackageManager的应用
- Android 获取应用系统程序的包名 PackageManager.
- 禁用Windows系统的自动播放功能
- 利用MVC做一个 常见的管理系统
- 利用jdbc做的一个简单系统(接上一篇)
- 利用栈 做一个简单的计算器系统
- 做一个新系统架构要考虑的模块功能
- net程序系统中有时需要对文本框的输入做一些限定,比如禁用粘贴功能
- android应用里面在某个界面禁止系统截屏功能的实现
- 利用PackageManager判断系统中是否存在与Intent匹配的组件
- flyme5禁用系统应用
- 功能:做一个公司的职员薪水管理系统,要求完成如下功能:
- 利用C语言文件读写做的一个文件拷贝功能
- 利用websocket,go语言和h5做了一个简单的聊天功能
- Android得到系统已安装应用程序包列表方法 自定义ListView显示 PackageManager的使用
- 学习linux必看的一些网站
- MAC报文鉴别码
- HDU
- 螺旋数组
- <javascript>的DOM对象
- 利用PackageManager做一个禁用某个系统应用的功能
- FPGA云服务器
- ASP.NET之Web控件
- Android下载OKHTTP
- CRC8 校验
- 获取计算机名和局域网内的工作组名称
- Linux系统日期时间设定方法及与Internet时间同步的设置
- MIME类型
- [caioj]1493: 基于连通性状态压缩的动态规划问题:Plan