转载一下方便以后参考 原文: https://blog.csdn.net/fireness/article/details/48177923
这里总结下我研究这个需求,想出的两种解决方案。
第一种方法最简单暴力只要修改apk的AndroidManifest直接上源码
-
<activity -
android:name=\"com.android.launcher3.Launcher\" -
android:launchMode=\"singleTask\" -
android:clearTaskOnLaunch=\"true\" -
android:stateNotNeeded=\"true\" -
android:theme=\"@style/Theme\" -
android:windowSoftInputMode=\"adjustPan\" -
android:screenOrientation=\"nosensor\"> -
<intent-filter android:priority=\"2\"> -
<action android:name=\"android.intent.action.MAIN\" /> -
<category android:name=\"android.intent.category.HOME\" /> -
<category android:name=\"android.intent.category.DEFAULT\" /> -
<category android:name=\"android.intent.category.MONKEY\"/> -
</intent-filter> -
</activity>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
这里就加了一句android:priority=”2”,这样在开机和按HOME键时候系统intent判断到category.HOME属性后如果有多个此属性apk,则会进入ResolverActivity让用户选择。当你定义了此优先级它其他未定义的都默认为0,所以优先进入了你的activity。
第二种方法需要修改 work源码来强制进入你的launcher
首先ActivityManagerService.java中
-
boolean startHomeActivityLocked(int userId) { -
if (mHeadless) { -
// Added because none of the other calls to ensureBootCompleted seem to fire -
// when running headless. -
ensureBootCompleted(); -
return false; -
} -
if (mFactoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL -
&& mTopAction == null) { -
// We are running in factory test mode, but unable to find -
// the factory test app, so just sit around displaying the -
// error message and don\'t try to start anything. -
return false; -
} -
Intent intent = getHomeIntent(); -
ActivityInfo aInfo = -
resolveActivityInfo(intent, STOCK_PM_FLAGS, userId); -
if (aInfo != null) { -
//add wwd start -
PackageManager pm = mContext.getPackageManager(); -
Intent newintent = new Intent(Intent.ACTION_MAIN); -
newintent.addCategory(Intent.CATEGORY_HOME); -
List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(newintent, 0); -
//判断带有Intent.CATEGORY_HOME标签的所有activity中如果有你指定的activity则替换 -
if(resolveInfoList != null){ -
int size = resolveInfoList.size(); -
for(int i = 0; i < size; i++){ -
ResolveInfo rInfo = resolveInfoList.get(i); -
if(rInfo.activityInfo.name.equals(\"com.android.launcher3.Launcher\")){ -
aInfo = rInfo.activityInfo; -
} -
} -
} -
//add wwd stop -
intent.setComponent(new ComponentName( -
aInfo.applicationInfo.packageName, aInfo.name)); -
// Don\'t do this if the home app is currently being -
// instrumented. -
aInfo = new ActivityInfo(aInfo); -
aInfo.applicationInfo = getAppInfoForUser(aInfo.applicationInfo, userId); -
ProcessRecord app = getProcessRecordLocked(aInfo.processName, -
aInfo.applicationInfo.uid, true); -
if (app == null || app.instrumentationClass == null) { -
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); -
//这里启动你已替换过的activity -
mStackSupervisor.startHomeActivity(intent, aInfo); -
} -
} -
return true; -
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
这样就把开机homeactivity替换成你想要启动的luncher了。
下面在修改按home键强制退回的launcher
PhoneWindowManager.java
-
public void init(Context context, IWindowManager windowManager, -
WindowManagerFuncs windowManagerFuncs) { -
...... -
mHomeIntent = new Intent(Intent.ACTION_MAIN, null); -
mHomeIntent.addCategory(Intent.CATEGORY_HOME); -
//add wwd start -
ComponentName mHomecom = new ComponentName(\"com.android.launcher3\", \"com.android.launcher3.Launcher\"); -
mHomeIntent.setComponent(mHomecom); -
//add wwd stop -
mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK -
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); -
...... -
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
这里添加以上两句让home强制跳转指定launcher就好了。
继续阅读与本文标签相同的文章
异构计算与高性能计算,是打开未来的两把钥匙
鸡蛋究竟宜不宜生吃——看阿里云计算怎么破?
-
Mybatis之discriminator(鉴别器)详解
2026-05-18栏目: 教程
-
前端进阶|第十一天 当全局变量,块变量,函数叫了同一个名字。。
2026-05-18栏目: 教程
-
Leetcode 542:01 矩阵 01 Matrix
2026-05-18栏目: 教程
-
LeetCode 733: 图像渲染 flood-fill
2026-05-18栏目: 教程
-
Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情
2026-05-18栏目: 教程
