2010-07-22 68 views
2

我能夠使用軟件包管理器獲取已安裝軟件包的列表,但這包括各種系統軟件包。我可以在此列表上應用哪些過濾器,以僅顯示從主屏幕提出應用程序列表時顯示的應用程序?獲取非系統應用程序列表

回答

6
boolean nonSystem = (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0; 
+1

是的,但也過濾我們的相機應用程序。你如何使它不會過濾掉這些類型的應用程序? – Taranasus 2011-09-12 16:28:22

0

您可以使用意圖過濾從主屏幕獲取應用程序列表:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(intent, 0); 
0

因此上述答案將並不適用於所有案例

如果一個應用程序是一個非系統應用程序必須具有啓動Intent才能啓動它。如果啓動意圖爲空,則其爲系統應用程序,否則其爲非系統應用程序

系統應用程序的示例:「com.android.browser.provider」,「com.google.android.voicesearch」。

對於上述應用程序,當您查詢啓動Intent時,您將獲得NULL。

PackageManager pm = getPackageManager(); 
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 
for(ApplicationInfo packageInfo:packages){ 
    if(pm.getLaunchIntentForPackage(packageInfo.packageName) != null){ 
       String currAppName = pm.getApplicationLabel(packageInfo).toString(); 
       //This app is a non-system app 
    } 
} 
相關問題