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.invokeplus.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权限的获取需要用户手动在设置->应用->特殊应用权限->使用情况访问中开启。
  • 在实际开发中,请考虑用户隐私和数据安全,不要滥用敏感权限。
回到顶部