禁止安装第三方应用(可对某个应用特殊处理),动态通过暗码改变是否能够安装第三方应用。拨号中输入*#数字#进入指定界面。
禁止安装第三方应用(可对某个应用特殊处理),动态通过暗码改变是否能够安装第三方应用:
o版本
主要是在frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
在handleStartCopy方法中有判断
if (onInt && onSd) {
最外的else内加入
if ("1".equals(SystemProperties.get("persist.sys.packageinstall.status", "0"))){ret = PackageManager.INSTALL_SUCCEEDED;} else {if (pkgLite.packageName != null && (pkgLite.packageName.equals("com.corget"))) {ret = PackageManager.INSTALL_SUCCEEDED;android.util.Log.e("tydtech", pkgLite.packageName+" can install");} else{ret = PackageManager.INSTALL_FAILED_INVALID_APK;android.util.Log.e("tydtech", "xxx not allow install");}}
最后把mRet = ret;
SystemProperties.get("persist.sys.packageinstall.status", "0")如果开始没有值,那就默认是0,就走else,当然这个get也可以是一个参数,不返回默认值。此类适用于开始已经定义好了初始值。一般在device里mediatek/system/common/system.prop。比如35,38,54题。下面那个判断就是具体的包名依然可以安装
如果是ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION,那就是提示空间不足,(手动安装或adb安装会给报错提示),所以推荐用PackageManager.INSTALL_FAILED_INVALID_APK;
import android.os.SystemProperties;
输入暗码再开启或关闭
override/vendor/freeme/frameworks/base/core-export/java/com/freeme/telephony/FreemeSpecialCharSequenceMgr.java
在handleSecretCode方法中
if (input.equals("*#731130#")) {Intent intent = new Intent();intent.setAction("COM_TYD_INSTALL");context.sendBroadcast(intent);Toast.makeText(context,context.getString(R.string.close_app_installation_permission),Toast.LENGTH_SHORT).show();return true;}if (input.equals("*#731129#")) {Intent intent = new Intent();intent.setAction("COM_TYD_UNINSTALL");context.sendBroadcast(intent);Toast.makeText(context,context.getString(R.string.open_app_installation_permission),Toast.LENGTH_SHORT).show();return true;}
就是发两个广播,至于这个toast提示,是为了有点反应,证明确实执行到了,别忘导包
import android.widget.Toast;import com.android.internal.R;
还有这toast的字符串要写好
vendor/freeme/frameworks/base/core-export/res/res/values/strings.xml
<string name="open_app_installation_permission">开启APP安装权限</string><string name="close_app_installation_permission">关闭APP安装权限</string>
在override/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
接受两个广播,并赋值
filter.addAction("COM_TYD_INSTALL");filter.addAction("COM_TYD_UNINSTALL");
BroadcastReceiver mDockReceiver = new BroadcastReceiver() {
加入
if (intent.getAction().equals("COM_TYD_INSTALL")) {SystemProperties.set("persist.sys.packageinstall.status", "0");}if (intent.getAction().equals("COM_TYD_UNINSTALL")) {SystemProperties.set("persist.sys.packageinstall.status", "1");}
SystemProperties.set("persist.sys.packageinstall.status,设置这种属性值,名字有讲究的!!!!,一定要是persist.sys.打头。这个已经系统定义好了,如果想自己定义,就找到property_contexts文件加入,这个是SeLinux需要的。
比如在device/droi/common/sepolicy/non_plat/ property_contexts
还有些在./mediatek/proprietary/modem/pd3d_l8/sepolicy/q0/property_contexts
加入
persist.freeme. u:object_r:system_prop:s0
就相当于一个系统各进程共享内存
源码的定义在system目录下,每个api不一样。比如P版本
~/2TSSD/P2/system/sepolicy/prebuilts/api/28.0/private/ property_contexts
persist.sys. u:object_r:system_prop:s0
所以只要能编译到底层都放到或者覆盖那个位置就可以
拨号中输入*#数字#进入指定界面:
vendor/freeme/frameworks/base/core-export/java/com/freeme/telephony/FreemeSpecialCharSequenceMgr.java
private static final SecretCode kSecretCode;static {kSecretCode = SecretCode.newInstance().build("*#6801#", "android.settings.DEVICE_INFO_SETTINGS", "*#6802#") /.build("*#6810#", "com.freeme.intent.action.SOFTWARE_INFO")
这个里面两个参数也行,第三个参数也可以是备用的号
这个SecretCode.newInstance()只是设置,号码数字打开哪个应用特定的action
然后这个kSecretCode交给
handleSecretCode方法里面去处理。
当然也可以仿照上面的,两者可互通
if (input.equals("*#731129#")) {Intent intent = new Intent();intent.setAction("COM_TYD_UNINSTALL");context.sendBroadcast(intent);return true;}
禁止安装第三方应用(可对某个应用特殊处理),动态通过暗码改变是否能够安装第三方应用。拨号中输入*#数字#进入指定界面。相关推荐
- WPF 禁止在文本框中输入数字
private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e){e.Handled = System ...
- python离线安装第三方库whl_详细说明如何在pycharm不联网的情况下,离线安装第三方库及依赖包(如sklearn)...
1.安装目标库 1.首先,选择你要导入的库文件,如seaborn库 下载网站: https://pypi.org/ 或https://www.lfd.uci.edu/~gohlke/pythonlib ...
- macos big sur安装php扩展_用PHP构建基于swoole扩展的socket服务(附PHP扩展安装步骤)...
最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...
- linux下安装树梅派系统,优麒麟树莓派系统(优麒麟 for Raspberry Pi)的安装方法...
要安装优麒麟树莓派系统(优麒麟 for Raspberry Pi),得先下载 ubuntukylin-focal-beta-raspi+arm64.img.xz,然后通过以下步骤引导您烧录优麒麟到您的 ...
- android studio安装部署及sdk下载_「从零开始Python爬虫」1.7.3 APPium的安装
Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android.iOS等设备完成自动化测试,比如模拟点击.滑动.输入等操作,其官方网站为:http://appiu ...
- win10安装hypermesh无法启动_最最详细的win10原版系统安装教程(包含制作启动安装)...
前言: 之前我有给大家讲过如何安装原版系统,而且视频教程也有,图文教程也有,但不全面.最近一直有人问我一些问题,不是不会制作,就是不会启动,所以考虑再三,还是决定花点时间再次给大家全面的详细的讲解一下 ...
- PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行了分类,为用户管理第三方框架提供了方便。
PodfileKit ======================== Easy Podfile ! PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行 ...
- alfresco6.1(源码版) + onlyoffice安装部署
alfresco6.1(源码版) + onlyoffice安装部署 简要说明 docker部署安装alfresco6.1 前提环境 Java maven docker 从原型生成项目 集成onlyof ...
- python使用第三方库MyQR实现生成动态二维码
使用python第三方库:MyQR GitHub地址: https://github.com/sylnsfar/qrcode 步骤: 1.安装myqr pip install MyQR 1.2 准备需 ...
最新文章
- R语言使用str_remove函数和str_remove_all函数删除模式匹配的字符串:str_remove函数删除第一个模式匹配的字符串、str_remove_all函数删除所有模式匹配的字符串
- 【原创】 PostgreSQL 实现MySQL 的auto_increment 字段
- json-lib解决死循环
- java invalidate_Java Component.invalidate方法代码示例
- API的非向后兼容性无论如何通常代表着一种比较差的设计
- geoserver矢量瓦片发服务前端展示偏移问题解决
- HDU1233 还是畅通工程
- js中单引号和双引号的区别_python中print函数 以及单引号、双引号、三引号
- HTML 5 新标签
- 扫一下这个神奇的二维码,Wifi不用输密码
- 公有云时代企业需要什么样的云平台
- IT硬件名人堂:40年经典产品和背后的故事(组图)
- 服务器所有文件后缀名变了,怎么样批量修改文件扩展名(后缀)
- linux安装浏览器 linux本地浏览器进行访问
- 有趣的KaTeX(附源码)
- K8S 快速入门(十六)实战篇:StorageClass(存储类)
- datatable render formatter
- 【RL-TCPnet网络教程】第4章 RL-TCPnet网络协议栈简介
- mysql slow设置_mysql slow log设置
- 计算机组装基地,系统基地装机大师工具装机版V6.5