Android 将自己的Launcher设置为默认启动

自己做了个很简单的launcher,但是在设置默认launcher的时候,每次重启机器的时候,就会重新弹出选择界面选择需要的launcher。


于是就google之,发现很多文章都一样,没有解决实际问题;有的需要自己重新编译源码,那当然没有必要,因为我这个只是简单的应用程序。


具体可以看以下代码


[plain]  view plain copy
  1. IntentFilter filter = new IntentFilter();   
  2. filter.addAction("android.intent.action.MAIN");  
  3. filter.addCategory("android.intent.category.HOME");   
  4. filter.addCategory("android.intent.category.DEFAULT");  
  5. Context context = getApplicationContext();  
  6. ComponentName component = new ComponentName(context.getPackageName(), MainActivity.class.getName());    
  7. ComponentName[] components = new ComponentName[] {new ComponentName("com.example.launcher", "com.example.launcher.Launcher"), component};    
  8. pm.clearPackagePreferredActivities("com.example.launcher");   
  9. pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);  


以上代码存在于自己写的launcher代码onCreate方法中

[plain]  view plain copy
  1. ComponentName component = new ComponentName(context.getPackageName(), MainActivity.class.getName());   

以上是自己的launcher的package name和需要加载的Activity name。

[plain]  view plain copy
  1. ComponentName[] components = new ComponentName[] {new ComponentName("com.example.launcher", "com.example.launcher.Launcher"), component};    

其中com.example.launcher 假设为系统的launcher,我们需要用自己做的来替换它作为默认launcher。


如果系统有多个launcher,那么可以通过ResolveInfo,得到所有的launcher。

[plain]  view plain copy
  1. Intent intent=new Intent(Intent.ACTION_MAIN);  
  2. intent.addCategory(Intent.CATEGORY_HOME);  
  3. List resolveInfoList = pm.queryIntentActivities(intent, 0);  

保留自己的launcher。

以上通过自己验证,如果有疑问或者有好的办法,都可以交流

你可能感兴趣的:(android原生应用修改)