禁止安装第三方应用(可对某个应用特殊处理),动态通过暗码改变是否能够安装第三方应用:

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也可以是一个参数,不返回默认值。此类适用于开始已经定义好了初始值。一般在devicemediatek/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;}

禁止安装第三方应用(可对某个应用特殊处理),动态通过暗码改变是否能够安装第三方应用。拨号中输入*#数字#进入指定界面。相关推荐

  1. WPF 禁止在文本框中输入数字

    private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e){e.Handled = System ...

  2. python离线安装第三方库whl_详细说明如何在pycharm不联网的情况下,离线安装第三方库及依赖包(如sklearn)...

    1.安装目标库 1.首先,选择你要导入的库文件,如seaborn库 下载网站: https://pypi.org/ 或https://www.lfd.uci.edu/~gohlke/pythonlib ...

  3. macos big sur安装php扩展_用PHP构建基于swoole扩展的socket服务(附PHP扩展安装步骤)...

    最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...

  4. linux下安装树梅派系统,优麒麟树莓派系统(优麒麟 for Raspberry Pi)的安装方法...

    要安装优麒麟树莓派系统(优麒麟 for Raspberry Pi),得先下载 ubuntukylin-focal-beta-raspi+arm64.img.xz,然后通过以下步骤引导您烧录优麒麟到您的 ...

  5. android studio安装部署及sdk下载_「从零开始Python爬虫」1.7.3 APPium的安装

    Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android.iOS等设备完成自动化测试,比如模拟点击.滑动.输入等操作,其官方网站为:http://appiu ...

  6. win10安装hypermesh无法启动_最最详细的win10原版系统安装教程(包含制作启动安装)...

    前言: 之前我有给大家讲过如何安装原版系统,而且视频教程也有,图文教程也有,但不全面.最近一直有人问我一些问题,不是不会制作,就是不会启动,所以考虑再三,还是决定花点时间再次给大家全面的详细的讲解一下 ...

  7. PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行了分类,为用户管理第三方框架提供了方便。

    PodfileKit ======================== Easy Podfile ! PodfileKit将github上常见的iOS(Swift)第三方框架进行了汇总,并且将框架进行 ...

  8. alfresco6.1(源码版) + onlyoffice安装部署

    alfresco6.1(源码版) + onlyoffice安装部署 简要说明 docker部署安装alfresco6.1 前提环境 Java maven docker 从原型生成项目 集成onlyof ...

  9. python使用第三方库MyQR实现生成动态二维码

    使用python第三方库:MyQR GitHub地址: https://github.com/sylnsfar/qrcode 步骤: 1.安装myqr pip install MyQR 1.2 准备需 ...

最新文章

  1. SAP SD交货单凭证流里的Confirmation of Service初探 II
  2. yaml语法--多行字符串可以使用|保留换行符,也可以使用>折叠换行
  3. 电脑上怎么配置mysql数据库服务器_Mysql数据库服务器安装与配置详解教程
  4. android baseactivity,Android应用开发Android通过BaseActivity获取到当前启动的Activity名称...
  5. 程序员的进阶课-架构师之路(11)-最容易理解的红黑树
  6. attributeerror: __enter___python魔法方法之__setattr__()
  7. 海思3519A配置NFS文件系统(永久)
  8. IDEA+Maven+多个Module模块(创建多模块SpringBoot整合项目)
  9. 帅炸了!乌克兰国防军队的系统账号和密码分别是 admin 和 123456!
  10. 史上最全的主流CPU性能排名
  11. Android Handler异步通信:深入详解Handler机制源码
  12. appStore上传苹果应用程序软件发布流程
  13. h5单页,微信浏览器唤醒APP
  14. 熟悉RealView MDK集成开发环境(Keil uVision4)的使用
  15. Open edX常见配置(fullstack)
  16. 度盘搜失效?这款网盘搜索神器万万别错过!
  17. 职中选什么专业好_职业学校什么专业最好 最有前途的专业排名
  18. sql 数字转换为字符串补0
  19. 吕鑫MFC学习系列二
  20. 如何查找Excel文件所在的完整路径

热门文章

  1. matlab海龟交易策略,【策略篇】海龟交易系统使用方法和源码
  2. 51nod1431 快乐排队
  3. 邪恶花网站邪恶花_指标:良好VS邪恶
  4. 连接mysql数据库有几种方式_数据库连接的几种常用方式
  5. 铁路管理系统(C语言)
  6. java怎样找出迷宫中所有路径_Java寻找迷宫路径
  7. SC系列(SC-20S)低频率小型SMD石英晶振SC-20S 32.768KHZ 12.5PF/20PPM
  8. 年龄 计算 php,php简单计算年龄的方法(周岁与虚岁)
  9. JQuery之常用插件
  10. OpenSSL 使用拾遗(二)---- X509 证书的 SKID/AKID 字段