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

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

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;

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Youth King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值