现在,需要跳过该选择的操作,直接进入我们所需启动的apk前提,在apk的代码中,有_android 如何开发launcher成独">
当前位置:   article > 正文

Android 10 高通平台,开机启动自定义的launcher(APK)_android 如何开发launcher成独立的apk

android 如何开发launcher成独立的apk

在安卓系统中,开机启动了原生打apk(home桌面软件)

当添加了一个设置了类似于以下属性打apk后,会弹出选择页面,选择需要启动的应用作为home

  1. <category android:name="android.intent.category.HOME"/>
  2. <category android:name="android.intent.category.DEFAULT" />

现在,需要跳过该选择的操作,直接进入我们所需启动的apk

前提,在apk的代码中,有以下属性

  1. <intent-filter>
  2. <action android:name="android.intent.action.MAIN" />
  3. <category android:name="android.intent.category.HOME"/>
  4. <category android:name="android.intent.category.DEFAULT" />

然后,修改对应的代码

  1. 代码路径是
  2. frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
  3. 在该文件中添加一个方法,如下
  4. private void setTargetActivityAsPreferredActivity(Intent intent,List<ResolveInfo> query, int userId){
  5. Slog.e(TAG, " setTargetActivityAsPreferredActivity");
  6. final int N =query.size();
  7. Slog.e(TAG, " setTargetActivityAsPreferredActivity N="+N);
  8. ComponentName[] set = new ComponentName[N];
  9. ComponentName componentName = null;
  10. int bestMatch = 0;
  11. for(int i = 0;i < N; i++){
  12. ResolveInfo r = query.get(i);
  13. set[i] = new ComponentName(r.activityInfo.packageName, r.activityInfo.name);
  14. Slog.e(TAG, " setTargetActivityAsPreferredActivity PackageName="+r.activityInfo.packageName);
  15. if (r.match > bestMatch) bestMatch = r.match;
  16. if("com.android.xxxx".equals(r.activityInfo.packageName)){ /*modify target apk packageName 填写你的包名*/
  17. componentName=set[i];
  18. }
  19. }
  20. IntentFilter filter = new IntentFilter();
  21. if (intent.getAction() != null) {
  22. filter.addAction(intent.getAction());
  23. }
  24. Set<String> categories = intent.getCategories();
  25. if (categories != null) {
  26. for (String cat : categories) {
  27. filter.addCategory(cat);
  28. }
  29. }
  30. filter.addCategory(Intent.CATEGORY_DEFAULT);
  31. if(null!=componentName){
  32. addPreferredActivity(filter, bestMatch,set,componentName,userId);
  33. }
  34. }

然后,在同一个文件中,在chooseBestActivity 方法中调用上述定义的方法

frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

  1. private ResolveInfo chooseBestActivity(Intent intent, String resolvedType,
  2. int flags, List<ResolveInfo> query, int userId) {
  3. if (query != null) {
  4. final int N = query.size();
  5. if (N == 1) {
  6. return query.get(0);
  7. } else if (N > 1) {
  8. setTargetActivityAsPreferredActivity(intent,query,userId); //这里就是调用的方法啦
  9. final boolean debug = ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0);
  10. // If there is more than one activity with the same priority,
  11. // then let the user decide between them.
  12. ResolveInfo r0 = query.get(0);
  13. .....
  14. 。。。。

然后,全编译,烧录验证。

参考链接:https://blog.csdn.net/cw102055234/article/details/88538121

https://blog.csdn.net/yiranfeng/article/details/103752203

如有帮助到你,请点赞谢谢。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/296514
推荐阅读
相关标签