uni-app 急需APP判断权限是否开启的插件
uni-app 急需APP判断权限是否开启的插件
https://ext.dcloud.net.cn/plugin?id=594 这个插件虽然已经有了,但魅族MX5手机禁止所有权限后依然提示已获得授权,根本就无法正确判断时候已开启权限。
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
自己判断下
请说明下设备的系统版本信息,在其它手机上是否有相同的问题?
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端
- 在Xcode中创建一个新的Cocoa Touch Static Library项目。
- 在项目中添加权限判断的逻辑,例如判断相机权限:
#import <Foundation/Foundation.h>
@interface PermissionChecker : NSObject
+ (BOOL)isCameraPermissionGranted;
@end
@implementation PermissionChecker
+ (BOOL)isCameraPermissionGranted {
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
return authStatus == AVAuthorizationStatusAuthorized;
}
@end
- 编译生成静态库,并将其打包成uni-app的原生插件。
Android端
- 在Android Studio中创建一个新的Library项目。
- 在项目中添加权限判断的逻辑,例如判断相机权限:
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;
}
}
- 编译生成AAR文件,并将其打包成uni-app的原生插件。
步骤二:在uni-app中使用插件
- 将打包好的原生插件上传到uni-app的插件市场或者使用本地插件。
- 在
manifest.json
中配置插件:
"plugins": {
"permissionChecker": {
"version": "1.0.0",
"provider": "your_plugin_provider"
}
}
- 在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的权限是否开启。在实际项目中,你可能需要根据具体需求对插件进行更复杂的封装和调用。