java - PackageManager.NameNotFoundException
问题描述
我有一个.java
文件:
....
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
....
/* PackageInfo packageInfo =
getPackageManager().getPackageInfo(getPackageName(),0);
curVersionCode = packageInfo.versionCode;*/
PackageManager pm = getPackageManager();
String pn = getPackageName();
PackageInfo pi = pm.getPackageInfo(pn,0);
curVersionCode = pi.versionCode;
....
为了理解错误,我用四行代码编写了代码。如您所见,两行代码在注释中。现在,这段代码不起作用,并PackageManager.NameNotFoundException
在我尝试构建时给出了一个错误。为清楚起见,我在不同的文件中使用了此代码,并且没有导致错误;所以无需担心包名。现在这个错误背后的原因是什么?还附上了一张图片以明确错误。
为了解决这个问题,我也尝试过这样的this.getPackageManager()
:getBaseContext().getPackageManager()
和getApplicationContext().getPackageManager()
; 但一切都是徒劳的。
解决方案
最初在这里回答
Android API 级别 30 中存在一项行为更改,因此当我们在 Android 11 上调用 getPackageInfo 时,即使应用程序/包应用程序已安装在用户的设备上,我们也会收到 NameNotFoundException。从 Android API 30 开始,我们需要在清单中指定包名称,以检查该包是否安装在用户的设备上。
<?xml version="1.0" encoding="utf-8"?>
<manifest
...>
<queries>
<package android:name="com.example.notes" />
</queries>
<application
android:name=".Notes App"
.../>
</manifest>
推荐阅读
- sql-server - 这个图像值的格式是什么?
- javascript - 如何在javascript中加入基于ID的匹配字符串?
- c++ - 基于 c++ 范围的 std::vector 迭代的顺序
- ios - 在某些设备上的 iPhone Safari 中网页加载缓慢
- ios - 呈现模态全屏 SwiftUI
- php - 将单个数组转换为多维
- kubernetes - 节点、Pod、容器之间的关系是什么?应用程序如何在集群中复制?
- javascript - 即使某些项目为空,如何检查数组中的所有项目?
- kubernetes - 谷歌云平台(GCP):挂载多卷 Kubernetes
- oracle - 创建触发器时出现编译错误