getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); 不能全部查到已经安装的软件

文章讲述了在升级到Android11后,开发者在进行包查询时遇到的问题,发现是由于权限不足导致查询结果不全,添加`QUERY_ALL_PACKAGES`权限后解决了这一问题。
摘要由CSDN通过智能技术生成
Android 11后,查询只能找到一部分,折腾好一会,原来又是权限问题,如果直接报错还好,不报错就是不全,加入权限就好了

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
    tools:ignore="QueryAllPackagesPermission" />
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这是因为您在获取 `PackageInfo` 时传递了一个 apk 文件的路径,而不是一个已经安装的应用程序的包名。因此,系统将会将该 apk 文件视为一个已安装的应用程序,而不是一个未安装的 apk 文件。当您从 u 盘中拔掉该 apk 文件时,系统仍然会认为该应用程序已经安装在设备上,因此您将无法卸载该应用程序。 要解决这个问题,您需要使用 `PackageManager` 的 `installPackage` 方法来安装该 apk 文件,而不是使用 `getPackageArchiveInfo` 方法来获取 `PackageInfo`。在安装完成后,您可以使用 `getPackageInfo` 方法来获取已安装应用程序的 `PackageInfo` 信息,并且可以通过 `uninstallPackage` 方法来卸载该应用程序。 以下是一个示例代码,用于安装并卸载一个 apk 文件: ```java PackageManager pm = context.getPackageManager(); String apkFilePath = "/storage/A804-B928/dangs-factory.apk"; // 安装 apk 文件 PackageInstaller packageInstaller = pm.getPackageInstaller(); PackageInstaller.SessionParams params = new PackageInstaller.SessionParams( PackageInstaller.SessionParams.MODE_FULL_INSTALL); int sessionId = packageInstaller.createSession(params); PackageInstaller.Session session = packageInstaller.openSession(sessionId); OutputStream out = session.openWrite("dangs-factory.apk", 0, -1); InputStream in = new FileInputStream(apkFilePath); byte[] buffer = new byte[65536]; int c; while ((c = in.read(buffer)) != -1) { out.write(buffer, 0, c); } session.fsync(out); in.close(); out.close(); session.commit(new IntentSender() { @Override public void sendIntent(Context context, int code, Intent intent, OnFinished onFinished, Handler handler) throws IntentSender.SendIntentException { // do nothing } }); // 获取已安装应用程序的 PackageInfo 信息 PackageInfo pkgInfo = pm.getPackageInfo("com.example.package.name", PackageManager.GET_ACTIVITIES); // 卸载应用程序 pm.uninstallPackage("com.example.package.name"); ``` 请注意,您需要将示例代码中的 `com.example.package.name` 修改为您安装的 apk 文件的包名。此外,您需要处理 `IOException` 和 `PackageManager.NameNotFoundException` 异常。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值