关于QUERY_ALL_PACKAGES权限导致Google下架apk
谷歌商店被下架,原因是第三方使用了 QUERY_ALL_PACKAGES 权限;
Google在高版本上限制了此权限的使用。当然,并不是 QUERY_ALL_PACKAGES 这个权限没有了,而是被列为敏感权限,必须有充分的理由说明,才允许上架 GP,否则下架。
需删除:
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" /><!-- 解决无法读取第三方应用包名问题-->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove"/><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
- 申请使用QUERY_ALL_PACKAGES权限,请说明详细用途,并在隐私政策上体现出来,如不使用请在工程里删除此权限.
- 修改过的包记得覆盖当前正式版,内部测试版.避免因为内部测试版的包没更新,造成再次下架,或者不过审.
AndroidManifest.xml
中,进行以下声明<queries> 元素。 <queries>
<!-- 微博 -->
<package android:name="com.sina.weibo" />
<!-- QQ -->
<package android:name="com.tencent.mobileqq" />
</queries>- 通过以下方式判断是否存在 context.getPackageManager().getPackageInfo(pkgName, 0);
如何打包apk呢?
Android studio 搜索全局,搜索对应的权限,然后点击此条权限后面的按钮开关进行关闭.这样打包的时候就没有出现该权限了,不然只要重新打包就还是会自动加入这个权限.
获取桌面所有已安装的应用:
方式一:
private List<String> getInstalledPackages(Context context) {
List<String> installedPackageList = new ArrayList<>();
List<PackageInfo> installedPackageInfoList = context.getPackageManager().getInstalledPackages(PackageManager.MATCH_UNINSTALLED_PACKAGES);for (PackageInfo packageInfo: installedPackageInfoList) {
installedPackageList.add(packageInfo.packageName);
}
return installedPackageList;
}方式二:
private List<String> getAllLauncherIconPackages(Context context) {
List<String> launcherIconPackageList = new ArrayList<>();Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);//set MATCH_ALL to prevent any filtering of the results
List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_ALL);
for (ResolveInfo info: resolveInfos) {
launcherIconPackageList.add(info.activityInfo.packageName);
}return launcherIconPackageList;
}