我在做一個Android啓動作一介紹,以使爲自己的Android應用程序,而我設計的一部分,需要我知道有許多應用程序都安裝在用戶的設備上,並最好只計算這是正常的應用程序,可以將那些被啓動。我希望將這些數量的應用程序存儲在全局變量中。只考慮這個目標,將這個數字作爲變量檢索的最簡單方法是什麼?獲取Android設備上已安裝應用的數量?
5
A
回答
2
你可以使用的PackageManager
的getInstalledApplications()
方法。
返回已安裝的 設備上的所有應用程序包的
List
。如果標誌GET_UNINSTALLED_PACKAGES
已定,將返回的所有 應用,包括那些DONT_DELETE_DATA
(部分 安裝了數據目錄的應用程序)刪除列表。
像這樣的東西應該工作:
int numberOfInstalledApps = getPackageManager(0).getInstalledApplications().size();
要過濾系統的應用程序,你可以做這樣的事情:
int numberOfNonSystemApps = 0;
List<ApplicationInfo> appList = getPackageManager().getInstalledApplications(0);
for(ApplicationInfo info : appList) {
if((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
numberOfNonSystemApps++;
}
}
2
的所有非系統應用程序都有一個啓動意圖使你只需要獲取所有應用程序的列表,並檢查其中有多少人具有啓動意圖,或者如果沒有,那麼該應用程序將是一個系統應用程序。所有應用程序的列表可以很容易地被包管理器檢索,然後我們通過的信息所有的應用程序,同時尋找可用的發射意圖。
至於建議by Darshan Patel: @Brad拉爾森♦
PackageManager pm = getPackageManager();
int nonSysAppsCount=0;
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();
nonSysAppsCount++;
//This app is a non-system app
}
else{
//System App
}
}
1
如果您正在尋找安裝了這個設備上的非系統應用程序,你可以做到以下幾點:
public static ArrayList<String> getInstalledApps() {
ArrayList<String> appList = new ArrayList<>();
List<PackageInfo> packList = getPackageManager().getInstalledPackages(0);
for (int i=0; i < packList.size(); i++) {
PackageInfo packInfo = packList.get(i);
if ( (packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
String appName = packInfo.applicationInfo.loadLabel(getPackageManager()).toString();
appList.add(appName);
Log.e("App >" + Integer.toString(i), appName);
}
}
return appList;
}
所以,你可以將列表做:
int number = getInstalledApps().size();
此外,您可以通過調用啓動任何應用程序:
Intent myIntent = new Intent(Intent.ACTION_MAIN, null);
myIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List appsList = context.getPackageManager().queryIntentActivities(myIntent, 0);
相關問題
- 1. 獲取Android設備上安裝的應用程序列表 - C#
- 2. 如何獲取已安裝應用程序的設備的deviceid?
- 3. android-獲取應用程序安裝在設備中的異常
- 4. Android:獲取安裝在Android設備上的列表
- 5. 已安裝設備的Android apk日誌
- 6. 獲取安裝在設備上的應用程序信息
- 7. 如何獲取設備上安裝的Android應用程序的包名
- 8. 獲取Android設備上安裝的根CA的列表
- 9. 獲取已安裝的應用的APK
- 10. 在真實設備上調試已安裝的應用程序
- 11. 當設備上已安裝fb時,Android Facebook SSO不起作用
- 12. 在我的Android設備上獲取有關已安裝應用程序的信息
- 13. 已簽名的apk不會安裝在我的Android設備上
- 14. 如何查詢Android設備上所有已安裝應用的權限?
- 15. 通過java代碼在Android設備上獲取已安裝應用程序的.apk文件
- 16. Android - 如何在設備上安裝已簽名的APK?
- 17. 在Android設備上修改已安裝的APK
- 18. 從Android Studio在設備上安裝Android應用程序
- 19. 獲取已安裝的Android應用程序的列表
- 20. 如何檢測,如果Android應用程序已經安裝在設備上?
- 21. 在Android設備上安裝應用程序的新手幫助
- 22. 在Android設備上安裝應用時出現的錯誤AndroidStudio
- 23. 未安裝在設備上的Android應用程序
- 24. 如何確定在Android設備上安裝的應用程序?
- 25. Cordova run android永久安裝在設備上的應用程序
- 26. 無法在genymotion設備上安裝我的android應用程序
- 27. 僅在Android設備上顯示預安裝的應用程序
- 28. 獲取已安裝應用程序的列表android
- 29. 如何獲取Android中已安裝應用程序的列表?
- 30. 在多個Android設備上安裝apk
太感謝你了,這正是擔任我需要和它的第一件事,我發現它實際上做的工作。這是我可以在互聯網上看到的這個問題的最簡單的解決方案。 – MSC
不客氣:) – earthw0rmjim