2017-10-13 98 views
0

我正在使用Package Manager類獲取所有已安裝應用程序的列表。我試着用下面的標誌來確定什麼是「用戶應用程序」與「系統應用」:如何確定應用程序抽屜中的Android應用程序列表

ApplicationInfo.FLAG_SYSTEM 
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP 

這個工作,但不是我想要的確切方式。我希望能夠篩選所有應用程序的列表以確定:此應用程序可在應用程序抽屜中看到嗎?

我不想與低級系統應用程序進行交互,因爲這可能會導致一些不良的副作用。但我想包含諸如「com.google.chrome」之類的內容,因爲它是應用程序抽屜中的應用程序,但在技術上作爲系統應用程序進行安裝。

我調試到Package Manager返回的ApplicationInfo列表中,發現某些應用程序的Int Icon值爲0或其他值(1254865等)。所以,我想:

List<ApplicationInfo> allApps = Utilities.getAllApps(mContext); 
List<ApplicationInfo> visibleApps = new ArrayList<>(); 
for (ApplicationInfo appInfo : allApps) { 
    if (appInfo.icon != 0) { 
     visibleApps.add(appInfo); 
    } 
} 

這讓我更接近,但在我的股票模擬器,還有100「allApps」,而這個邏輯幫我鑽到54級的應用程序。但抽屜裏只有25個應用程序...

回答

1

此應用程序在應用程序抽屜中可見嗎?

如果通過「應用程序抽屜」,您指的是主屏幕啓動器,那麼顯示的內容取決於主屏幕啓動器的開發者。

你可以找出什麼活動正在提供通過PackageManagerqueryIntentActivities()在主屏幕發射來展示,尋找ACTION_MAIN/CATEGORY_LAUNCHER活動。從那裏,你可以得到一個提供這些活動的應用程序列表(記住任何應用程序可能提供0,1或幾個這樣的活動)。

相關問題