2012-05-28 60 views
1

我需要顯示一個包含所有已安裝應用程序的屏幕。我可以做到這一點,但我需要過濾一些系統應用程序。我做這樣的:如何篩選一些應用程序應用程序?

if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) 

這工作,但問題是,它隱藏像系統,視頻播放器和錄音機應用程序。不過,我也需要這些應用。問題是,如何做到這一點?

回答

2

你必須通過自己的進程名手動進行篩選,例如:

if(appInfo.packageName().equals("com.android.soundrecorder"))

請發表您更多的代碼,如果這行不通!

+0

這工作,非常感謝。我只是希望這與其他Android版本一起工作。 –

+0

它應該可以很好地與其他android版本一起工作,'packageName'和'FLAG_SYSTEM'已經在API-Level 1之後的SDK中:http://developer.android.com/reference/android/content/pm/ApplicationInfo.html# FLAG_SYSTEM – Nick

1

如果應用程序是非系統應用程序,則它必須具有可啓動的啓動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 
    } 
    else{ 
     //System App 
    } 
} 
相關問題