簡體   English   中英

getPackageManager 和 MockPackageManager

[英]getPackageManager and MockPackageManager

我想通過使用MockPackageManager類中的getInstalledApplications()方法來MockPackageManager設備上已安裝應用程序的列表(是的,它已被棄用)。 我使用了以下代碼(在我的活動中):

MockPackageManager mpm = new MockPackageManager();
List<ApplicationInfo> appInfoList = mpm.getInstalledApplications(0);

但它給了我這個錯誤:

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/test/mock/MockPackageManager;

然后找到了這種方式(有效):

 List<ApplicationInfo> appInfoList = getPackageManager().getInstalledApplications(0);

我查看了 Android 文檔,但只找到了這些:

用於檢索與當前安裝在設備上的應用程序包相關的各種信息的類。 你可以通過 getPackageManager() 找到這個類。 [包管理器文檔]

返回 PackageManager 實例以查找全局包信息。[關於 getPackageManager() 的上下文文檔]

我真的不明白為什么第一種方式是錯誤的,為什么我應該先用getPackageManager()它會做什么?)。

提前Tnx。

PS:對不起,如果這是一個簡單(愚蠢!)的問題:)

正如此處的官方文檔中所述, MockPackageManager是一個(不推薦使用的)測試類,用於MockPackageManager包管理器行為。

在說明中有說明:

所有方法都是非功能性的並拋出 UnsupportedOperationException。 覆蓋它以提供您需要的操作。

僅當您想測試一些涉及包管理器的代碼時,這才有用。

要訪問真正的實現,您必須使用真正的PackageManager

PackageManager pManager = getPackageManager(); //in a context environment

或者

PackageManager pManager = context.getPackageManager(); //in a non-context environment
    try {
        if (ActivityCompat.checkSelfPermission(this, mPermission)
                != MockPackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this, new String[]{mPermission},
                    REQUEST_CODE_PERMISSION);

            //  If any permission above not allowed by user, this condition will
            //  execute every time, else your else part will work
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

那是我的代碼片段。 我有一個錯誤 MockPackageManager。 然后我將其更改為 PackageManager。 並解決了問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM