因为Android 11的 软件包可见性 ,无法通过包名打开应用,无法通过包名获取版本号。

2021-11-04 遇到的一点小问题
最近Android开发需要获取某个app的版本,并跳转打开。之前一直用的代码竟然都无法实现。

//获取app版本名称
PackageInfo packageInfo = getPackageManager().getPackageInfo("com.wannoo.test", 0);
String versionName= packageInfo.versionName;
//打开app
Intent intent = getPackageManager().getLaunchIntentForPackage("com.wannoo.test");
startActivity(intent);

确定包名,打算使用获取全部安装的应用的方法来查看,结果Android Studio有提示,Android 11无法查看。

getInstalledApplications

getInstalledPackages

这几天确实将手机升级版本到Android 11。看来是因为Android 11的软件包可见性影响的。
知道问题,网上搜一下就很多解决方案了。
我的build.gradletargetSdkVersion 30,参考Android11适配-包可见性,在AndroidManifest.xml里添加queries,就可以了。

    <queries>
        <package android:name="com.wannoo.test" />
        <package android:name="com.spotify.music" />
        <package android:name="com.roon.mobile" />
    </queries>

看了下谷歌开发者发表的您离成功还差一本免费的《Android 11 开发者手册》里面的《Android 11 开发者手册》,发现queries里的内容必须明确,不能动态添加。
顺便看了下拖不得了,Android11真的来了,最全适配实践指南奉上,看看app还有哪些要修改的。

.

2022-12-15
今天刚好看到这个权限<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />,使用这个权限可以不用设置<queries/>,顺便记录一下。
这个权限一般是给浏览器、应用市场之类的使用的,具体信息网上很多。Google不建议使用就对了。

QUERY_ALL_PACKAGES

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容