uni-app 急需APP判断权限是否开启的插件

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app 急需APP判断权限是否开启的插件

https://ext.dcloud.net.cn/plugin?id=594 这个插件虽然已经有了,但魅族MX5手机禁止所有权限后依然提示已获得授权,根本就无法正确判断时候已开启权限。

开发环境 版本号 项目创建方式
9 回复

自己判断下


请说明下设备的系统版本信息,在其它手机上是否有相同的问题? Android系统权限是在6.0之后开始统一管理的,要求Android系统6+版本(API等级23+),并且必须设置targetSdkVersion>=23。 参考:http://www.html5plus.org/doc/zh_cn/android.html#plus.android.requestPermissions

我这是安卓5.1版本,那请问Android系统6+版本以下的手机怎么判断权限是否开启?因为APP偏向老龄人群,大部分可能还在用老手机。

回复 1***@qq.com: 低版本没有统一的方法,每个ROM都不一样。

回复 1***@qq.com: 在低版本手机上一般是调用功能API时,如果给权限了会成功返回,否则会失败。可以根据操作结果引导。

回复 DCloud_App_Array: 如果开发一个原生插件兼容市面上大部分机型,是否可以最大程度的解决此类问题呢?最主要是使用率最高的 通知栏和摄像头权限,这两个权限如果无法准确判断影响还是挺大的,谢谢。

回复 1***@qq.com: 原生插件可以实现,至于是否兼容大部分手机就看插件是否能做到。 权限的问题在于低版本系统没有统一的API,每个ROM厂商做法可能都不一样,得单个去适配。

Q 1196097915 私聊,我可以做,

在uni-app中,你可以通过原生插件或者条件编译的方式来实现对APP权限的判断。对于iOS和Android平台,原生插件是较为常见的做法。下面我将提供一个简单的示例,展示如何通过uni-app的原生插件接口来判断某些权限是否已经开启。

步骤一:创建原生插件

iOS端

  1. 在Xcode中创建一个新的Cocoa Touch Static Library项目。
  2. 在项目中添加权限判断的逻辑,例如判断相机权限:
#import <Foundation/Foundation.h>

@interface PermissionChecker : NSObject

+ (BOOL)isCameraPermissionGranted;

@end

@implementation PermissionChecker

+ (BOOL)isCameraPermissionGranted {
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    return authStatus == AVAuthorizationStatusAuthorized;
}

@end
  1. 编译生成静态库,并将其打包成uni-app的原生插件。

Android端

  1. 在Android Studio中创建一个新的Library项目。
  2. 在项目中添加权限判断的逻辑,例如判断相机权限:
package com.example.permissionchecker;

import android.content.Context;
import android.content.pm.PackageManager;

public class PermissionChecker {

    public static boolean isCameraPermissionGranted(Context context) {
        int result = context.checkCallingOrSelfPermission("android.permission.CAMERA");
        return result == PackageManager.PERMISSION_GRANTED;
    }
}
  1. 编译生成AAR文件,并将其打包成uni-app的原生插件。

步骤二:在uni-app中使用插件

  1. 将打包好的原生插件上传到uni-app的插件市场或者使用本地插件。
  2. manifest.json中配置插件:
"plugins": {
    "permissionChecker": {
        "version": "1.0.0",
        "provider": "your_plugin_provider"
    }
}
  1. 在uni-app的代码中调用插件接口判断权限:
if (uni.getSystemInfoSync().platform === 'android') {
    const permissionChecker = require('@/plugins/permissionChecker/android');
    const isCameraPermissionGranted = permissionChecker.isCameraPermissionGranted(uni.getSystemInfoSync().SDKVersion);
    console.log('Camera Permission Granted:', isCameraPermissionGranted);
} else if (uni.getSystemInfoSync().platform === 'ios') {
    const permissionChecker = require('@/plugins/permissionChecker/ios');
    const isCameraPermissionGranted = permissionChecker.isCameraPermissionGranted();
    console.log('Camera Permission Granted:', isCameraPermissionGranted);
}

注意:这里的require路径和插件的导出方式需要根据你的实际插件结构和配置进行调整。

以上是一个简单的示例,展示了如何通过uni-app的原生插件来判断APP的权限是否开启。在实际项目中,你可能需要根据具体需求对插件进行更复杂的封装和调用。

回到顶部