[英]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.