首页 > 解决方案 > 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(); 但一切都是徒劳的。

标签: javaandroid

解决方案


最初在这里回答

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>

推荐阅读