10

我想要獲取Android L中的所有默認應用程序。我使用了波紋管代碼,但他們給了我一個錯誤的解決方案。讓我先看看我的代碼在Android中顯示錯誤的默認應用程序列表L

private void getMyAppLauncherDefault() { 
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); 
    filter.addCategory(Intent.CATEGORY_HOME); 
    List<IntentFilter> filters = new ArrayList<IntentFilter>(); 
    filters.add(filter); 
    List<ComponentName> activities = new ArrayList<ComponentName>(); 
    final PackageManager packageManager = (PackageManager) getPackageManager(); 

    packageManager.getPreferredActivities(filters, activities, null); 
    for (ComponentName activity : activities) { 

     Log.d(TAG,"======packet default:==="+activity.getPackageName()); 
    } 
} 

而這是日誌。日誌在com.google.android.googlequicksearchboxcom.vlingo.midas之間顯示錯誤結果。他們都是語音應用程序,但我默認設置了com.google.android.googlequicksearchbox。我不知道爲什麼日誌顯示com.vlingo.midas。我該如何解決它?由於

16:02:44.817 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.vlingo.midas 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.launcher 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.google.android.googlequicksearchbox 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.app.sbrowser 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.sec.android.gallery3d 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.android.mms 
16:02:44.827 /com.exam D/Sample: ======packet default:===com.google.android.apps.plus 

更新:有默認的應用程序名稱 enter image description here

+0

'com.vlingo.midas'很可能支持一個額外的過濾器,爲此它顯示出來。用包名稱打印相應的過濾器以檢查這一點。 – F43nd1r

+0

@ F43nd1r:我們如何打印? 「過濾器」大小隻是1,而「過濾器」大小是4.但我無法打印過濾器的名稱 – Jame

+0

可能是com.vlingo.midas是默認用於不同目的/應用程序。 –

回答

2

要檢查,如果你的應用程序設置爲「默認」,那麼請試試這個代碼:

public static boolean isMyAppDefault(Context context) { 
     final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); 
     filter.addCategory(Intent.CATEGORY_HOME); 

     List<IntentFilter> filters = new ArrayList<IntentFilter>(); 
     filters.add(filter); 

     final String myPackageName = context.getPackageName(); 
     List<ComponentName> activities = new ArrayList<ComponentName>(); 
     final PackageManager packageManager = (PackageManager) context.getPackageManager(); 

     packageManager.getPreferredActivities(filters, activities, null); 

     for (ComponentName activity : activities) { 
      if (myPackageName.equals(activity.getPackageName())) { 
       return true; 
      } 
     } 
     return false; 
    } 
+0

@ user8430如果您有任何問題,請告訴我。 –

+0

我認爲你和我有同樣的來源。在你的解決方案中,它與我上面的代碼類似,只是修改了一些東西。發佈前請檢查您的解決方案。 – Jame

2

您在上面添加的代碼是完全正確的。它確實表現了它的意義。

現在你已經設置com.google.android.googlequicksearchbox語音應用程序的默認,這就是爲什麼它顯示在日誌中了。 雖然com.vlingo.midas顯示可能是因爲它被設置爲某種其他種類的類別而不是語音的默認值。

+0

你怎麼證明它?我不這麼認爲。我檢查所有 – Jame

+0

@ user8430我將需要嘗試證明它。我會試試看,並讓你知道 –

+0

你找到解決方案嗎?我仍然期待着您的測試 – Jame

相關問題