我是 Android 编程新手。我使用 Eclipse 以及 MainActivity.java 和 ClassFragment.java 文件创建了一个应用程序。 ClassFragment 是一个片段。我正在使用新更新的 appcompat 库。我只想在我的片段中实现一个 toast,其中将显示应用程序的版本 vode 和版本名称。我使用了以下代码
PackageManager pInfo = getActivity().getPackageManager.getPackageInfo(getActivity().getPackageName, 0);
但它显示java编译错误PackageManager namenotfoundException。请帮我解决这个问题。预先感谢。
Android API 级别 30 中存在一项行为更改,因此,当我们在 Android 11 上调用 getPackageInfo 时,即使用户设备上安装了应用程序/包应用程序,我们也会收到 NameNotFoundException。从 Android API 30 开始,我们需要在清单中指定包名称,以便检查该包是否安装在用户设备上。
<?xml version="1.0" encoding="utf-8"?>
<manifest
...>
<queries>
<package android:name="com.example.Maps" />
</queries>
<application
android:name=".Notes App"
.../>
</manifest>
PackageManager manager = getActivity().getPackageManager();
PackageInfo info;
try {
info = manager.getPackageInfo(getActivity().getPackageName(), 0);
String strVersion = "Version: " + info.versionName;
String strVersionCode = " Build: "+ info.versionCode);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
从Android API level 30开始你需要添加这个权限 android.permission.QUERY_ALL_PACKAGES
更多信息: https://developer.android.com/training/package-visibility