禁止某个app通过开机广播自启动,覆盖住Launcher
代码位置 :
powershell
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
具体修改如下
java
public final int startActivityAsUser(IApplicationThread caller, String callingPackage,
Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId,
boolean validateIncomingUser) {
enforceNotIsolatedCaller("startActivity");
// for disable MQlAUNCHER begin 开始
if (isMoreLauncherConfig()) {
Log.d("youdianxs", "MQ CONFIG");
try{
ActivityInfo aInfo = resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);
Log.d("youdianxs", "callingPackage = " + callingPackage);
Log.d("youdianxs", "callingPackageactivity = " + aInfo.taskAffinity);
//判断包名
if (MQ_PACKAGE.equals(callingPackage)){
Log.d("youdianxs", "MQ START===" + isProhibitLauncherTime());
if (isProhibitLauncherTime() && isNoMqLauncher()) {
Log.d("youdianxs", "MQ lanjie");
//核心代码 所有条件成立start cancel
return ActivityManager.START_CANCELED;
}
}
}catch(Exception e){
Log.d("youdianxs", "e.getMessage = " + e.getMessage());
}
}
// for disable MQlAUNCHER end 结束
userId = mActivityStartController.checkTargetUser(userId, validateIncomingUser,
Binder.getCallingPid(), Binder.getCallingUid(), "startActivityAsUser");
// TODO: Switch to user app stacks here.
return mActivityStartController.obtainStarter(intent, "startActivityAsUser")
.setCaller(caller)
.setCallingPackage(callingPackage)
.setResolvedType(resolvedType)
.setResultTo(resultTo)
.setResultWho(resultWho)
.setRequestCode(requestCode)
.setStartFlags(startFlags)
.setProfilerInfo(profilerInfo)
.setActivityOptions(bOptions)
.setMayWait(userId)
.execute();
}
//判断是否开机前十分钟之内
private boolean isProhibitLauncherTime() {
Log.d("youdianxs", "MQ time====" + (SystemClock.elapsedRealtime() / 1000 / 60));
return (SystemClock.elapsedRealtime() / 1000 / 60) <= 10;
}
//判断此Activity是不是默认Launcher
private boolean isNoMqLauncher() {
final ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
ComponentName currentDefaultHome = mContext.getPackageManager().getHomeActivities(homeActivities);
if (currentDefaultHome != null) {
Log.d("youdianxs", "currentDefaultHome.flattenToString()====" + currentDefaultHome.flattenToString());
return !currentDefaultHome.flattenToString().equals(MQ_PACKAGE + "/" + MQ_ACTIVITY);
}
return true;
}
//判断配置成立
private boolean isMoreLauncherConfig() {
return SvtGeneralProperties.getBoolProperty("SVT_ZC_MORE_HOME_CONFIG");
}
总结 条件成立时 --------> return ActivityManager.START_CANCELED;