PackageManager 名称未找到异常

问题描述 投票:0回答:3

我是 Android 编程新手。我使用 Eclipse 以及 MainActivity.java 和 ClassFragment.java 文件创建了一个应用程序。 ClassFragment 是一个片段。我正在使用新更新的 appcompat 库。我只想在我的片段中实现一个 toast,其中将显示应用程序的版本 vode 和版本名称。我使用了以下代码

PackageManager pInfo = getActivity().getPackageManager.getPackageInfo(getActivity().getPackageName, 0);
但它显示java编译错误PackageManager namenotfoundException。请帮我解决这个问题。预先感谢。

android android-package-managers
3个回答
20
投票

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>

1
投票
    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();
            }

0
投票

从Android API level 30开始你需要添加这个权限 android.permission.QUERY_ALL_PACKAGES

更多信息: https://developer.android.com/training/package-visibility

© www.soinside.com 2019 - 2024. All rights reserved.