uni-app开发的APP内突然自动弹窗提示需要读取应用列表及已安装应用信息,以识别用户偏好并推荐相关服务。
uni-app开发的APP内突然自动弹窗提示需要读取应用列表及已安装应用信息,以识别用户偏好并推荐相关服务。 想知道如何取消这个自动弹窗,需要强制移除什么权限?
<uses-permission android:name="android.permission.GET_INSTALLED_APPS"/>
3 回复
我也是碰上这个问题了,估计是BUG
更多关于uni-app开发的APP内突然自动弹窗提示需要读取应用列表及已安装应用信息,以识别用户偏好并推荐相关服务。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我也是,移除权限都移除不了,怎么解决?
针对您提到的uni-app开发的APP内突然自动弹窗提示需要读取应用列表及已安装应用信息的问题,这通常涉及到Android平台的权限申请与处理。在Android 6.0(API 级别 23)及以上版本中,应用需要在运行时动态请求敏感权限,而不是在安装时一次性申请所有权限。
以下是一个关于如何在uni-app中处理读取应用列表权限的代码示例,以及如何在用户授权后获取已安装应用信息的步骤:
1. 配置AndroidManifest.xml
首先,在manifest.json
中配置AndroidManifest.xml
,添加读取应用列表的权限:
"mp-weixin": {
"appid": "your-app-id",
"setting": {
"android": {
"permissions": [
"android.permission.QUERY_ALL_PACKAGES",
"android.permission.PACKAGE_USAGE_STATS"
]
}
}
}
注意:PACKAGE_USAGE_STATS
权限在Android 8.0(API 级别 26)及以上版本中,需要用户手动在设置中授予,无法直接通过代码请求。
2. 动态请求权限(以Vue.js为例)
在需要读取应用列表的页面或组件中,使用plus.android.invoke
和plus.android.importClass
来调用Android原生API进行权限请求:
export default {
methods: {
requestAppListPermission() {
if (this.hasPermission("android.permission.QUERY_ALL_PACKAGES")) {
this.getAppList();
} else {
let MainActivity = plus.android.runtimeMainActivity();
let context = MainActivity;
let permission = "android.permission.QUERY_ALL_PACKAGES";
if (plus.os.name === "Android" && plus.android.APILevel() >= 23) {
MainActivity.requestPermissions([permission], 100);
} else {
// Below API 23, permission is granted by default
this.getAppList();
}
}
},
hasPermission(permission) {
let context = plus.android.runtimeMainActivity();
let PackageManager = plus.android.importClass('android.content.pm.PackageManager');
return context.checkCallingOrSelfPermission(permission) === PackageManager.PERMISSION_GRANTED;
},
getAppList() {
// Code to get the list of installed apps after permission is granted
let pm = plus.android.runtimeMainActivity().getPackageManager();
let intent = new plus.android.importClass('android.content.Intent')(plus.android.importClass('android.content.Intent').ACTION_MAIN, null);
intent.addCategory(plus.android.importClass('android.content.Intent').CATEGORY_LAUNCHER);
let list = pm.queryIntentActivities(intent, 0);
for (let i = 0; i < list.size(); i++) {
let info = list.get(i).activityInfo;
console.log(info.packageName + " : " + info.loadLabel(pm));
}
}
}
}
注意事项
- 请确保您的应用已正确处理用户拒绝权限请求的情况。
PACKAGE_USAGE_STATS
权限的获取需要用户手动在设置->应用->特殊应用权限->使用情况访问中开启。- 在实际开发中,请考虑用户隐私和数据安全,不要滥用敏感权限。