2013-02-14 68 views
0

我很好奇,如果設備有一個備用主頁應用程序被選爲默認應用程序,如何啓動股票Android主頁啓動器。有沒有辦法啓動股票主頁啓動器(即使它目前沒有設置爲'默認')?

目前我使用

startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(startMain); 

但是這隻能如果默認發射器是Android啓動。我需要的是一種啓動Android啓動程序的方式,無論用戶將其設置爲本地主頁的哪個應用程序。

有沒有辦法做到這一點?

+2

我認爲你可以做到這一點,如果你知道有'ComponenetName.unflattenFromString(的packageName)設備上的桌面應用的包名'但是我覺得這不是一個真正的解決方案,因爲不是所有的設備將有一個「默認」啓動程序與我懷疑的包名相同。 – FoamyGuy 2013-02-14 16:17:06

+0

是的,這就是我所擔心的。 – 2013-02-14 16:26:05

回答

0

沒有人插話,但這是我找到的解決方案。

唯一的問題是您需要指定您正在查找的包名稱的某個部分(因爲假設您有多個應用程序已將其自己註冊爲HOME)時這樣做。

所以下面的代碼可以處理我測試過的所有設備,但顯然決不是未來的證明。

 void getDefaultLauncher() {  

     final Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     final List<ResolveInfo> list = ((PackageManager)getPackageManager()).queryIntentActivities(intent, 0);  


     //String className = null; 
     for(ResolveInfo ri : list){ 
      Log(TAG,"FOUND NATIVE LAUNCH ACTIVITY " + ri.activityInfo.packageName); 


       if(ri.activityInfo.packageName.contains("com.lge") || 
       ri.activityInfo.packageName.contains("android") || 
       ri.activityInfo.packageName.contains("motorola.homescreen") || 
       ri.activityInfo.packageName.contains("htc.launcher")){ 

       startSpecificActivity(ri); 
       return; 
      } 
     } 

     Log(TAG,"DIDN'T FIND MATCHING HOME APP");  
    } 




public void startSpecificActivity(ResolveInfo launchable) { 

    ActivityInfo activity=launchable.activityInfo; 

    ComponentName name=new ComponentName(activity.applicationInfo.packageName, activity.name); 

    Intent i=new Intent(Intent.ACTION_MAIN); 
    i.addCategory(Intent.CATEGORY_LAUNCHER); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
        Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
    i.setComponent(name); 
    startActivity(i);  
} 
0
private void goHome() { 
try { 
    PackageManager pm = getPackageManager(); 
    Intent i = new Intent("android.intent.action.MAIN"); 
    i.addCategory("android.intent.category.HOME"); 
    List<ResolveInfo> lst = pm.queryIntentActivities(i, 0); 
    if (!lst.isEmpty()) { 
     for (ResolveInfo resolveInfo : lst) { 
      if ("com.my.package".equals(resolveInfo.activityInfo.packageName)) continue; 
      Intent intent = new Intent(); 
      intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); 
      intent.addCategory(Intent.CATEGORY_LAUNCHER); 
      startActivity(intent);   
      } 
    }  
} catch (Throwable t) { 
    L.g().log(t); 
} 
} 
相關問題