我需要顯示一個包含所有已安裝應用程序的屏幕。我可以做到這一點,但我需要過濾一些系統應用程序。我做這樣的:如何篩選一些應用程序應用程序?
if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
這工作,但問題是,它隱藏像系統,視頻播放器和錄音機應用程序。不過,我也需要這些應用。問題是,如何做到這一點?
我需要顯示一個包含所有已安裝應用程序的屏幕。我可以做到這一點,但我需要過濾一些系統應用程序。我做這樣的:如何篩選一些應用程序應用程序?
if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
這工作,但問題是,它隱藏像系統,視頻播放器和錄音機應用程序。不過,我也需要這些應用。問題是,如何做到這一點?
你必須通過自己的進程名手動進行篩選,例如:
if(appInfo.packageName().equals("com.android.soundrecorder"))
請發表您更多的代碼,如果這行不通!
如果應用程序是非系統應用程序,則它必須具有可啓動的啓動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
}
}
這工作,非常感謝。我只是希望這與其他Android版本一起工作。 –
它應該可以很好地與其他android版本一起工作,'packageName'和'FLAG_SYSTEM'已經在API-Level 1之後的SDK中:http://developer.android.com/reference/android/content/pm/ApplicationInfo.html# FLAG_SYSTEM – Nick