From 7f7969a0c09e007afa7af022301c2fe2cdc55c31 Mon Sep 17 00:00:00 2001 From: liujingdong <1522527313@qq.com> Date: Wed, 8 Nov 2017 11:00:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit android权限验证插件(cordova) --- README.md | 12 ++++ package.json | 21 +++++++ plugin.xml | 23 +++++++ src/android/PermissionsPlugin.java | 97 ++++++++++++++++++++++++++++++ www/PermissionsPlugin.js | 14 +++++ 5 files changed, 167 insertions(+) create mode 100644 README.md create mode 100644 package.json create mode 100644 plugin.xml create mode 100644 src/android/PermissionsPlugin.java create mode 100644 www/PermissionsPlugin.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..156ede4 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +--- +title: android6.0动态权限验证 +description: android6.0以上权限验证的cordova插件 +Installation: ionic plugin add https://github.com/liujingdong/cordovaAddPermissions.git +Supported Platforms: android +deleting: +var perArr = ["android.permission.WRITE_EXTERNAL_STORAGE","android.permission.RECORD_AUDIO","android.permission.CAMERA"] +PermissionsPlugin.addPermissions("权限",onPermissionsSuccess,onPermissionsFail,perArr); +onPermissionsSuccess:成功回调方法 +onPermissionsFail:失败回调方法 +--- + diff --git a/package.json b/package.json new file mode 100644 index 0000000..744b854 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "crazy-dong-plugin-permissions", + "version": "1.0.0", + "description": "scan_qr", + "cordova": { + "id":"org.cordova.PermissionsPlugin", + "platforms": [ + "android" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/liujingdong/cordovaAddPermissions.git" + }, + "keywords": [ + "ecosystem:cordova", + "cordova-android" + ], + "author": "liujingdong", + "license": "ISC" +} diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..b7655bf --- /dev/null +++ b/plugin.xml @@ -0,0 +1,23 @@ + + + PermissionsPlugin + android6.0以上添加权限 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/android/PermissionsPlugin.java b/src/android/PermissionsPlugin.java new file mode 100644 index 0000000..85f6712 --- /dev/null +++ b/src/android/PermissionsPlugin.java @@ -0,0 +1,97 @@ +package custom.cordova.permissions; + +import android.Manifest; +import android.content.pm.PackageManager; +import android.os.Build; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.util.Log; +import android.widget.Toast; + +import org.apache.cordova.CallbackContext; +import org.apache.cordova.CordovaPlugin; +import org.json.JSONArray; +import org.json.JSONException; + +/** + * Created by CrazyDong on 2017/11/2. + *android6.0以上添加权限插件 + */ +public class PermissionsPlugin extends CordovaPlugin { + private CallbackContext mCallbackContext; + private int requestCode = 201711; + @Override + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) + throws JSONException { + mCallbackContext = callbackContext; + if(action.equals("权限")){ + String preArr[] = new String[args.length()]; + for (int i = 0; i < args.length(); i++) { + preArr[i] = args.getString(i); + } +// checkPermission(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE); + checkPermission(preArr); + + return true; + } + return false; + } + + /** + * 检测权限 + */ + public void checkPermission(String... permission) { + if (hasGrantedPermission(permission)) { + mCallbackContext.success("permission allow"); + } else { + requestPermission(permission); + } + } + + /** + * 是否已获得传入的权限 + */ + private boolean hasGrantedPermission(String... permission) { + if (Build.VERSION.SDK_INT > 22) { + for (String per : permission) { + boolean hasPers = ContextCompat.checkSelfPermission( + cordova.getActivity(), per) == PackageManager.PERMISSION_GRANTED; + + if (!hasPers) { + return false; + } + } + } else { + return true; + } + return true; + } + + /** + * 申请权限 + */ + private void requestPermission(String... permission) { + + if (permission == null) { + return; + } + String[] perms = new String[permission.length]; + for (int i = 0; i < permission.length; i++) { + perms[i] = permission[i]; + } + ActivityCompat.requestPermissions(cordova.getActivity(), perms, requestCode); + } + + + /*用户操作后回调*/ + + @Override + public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) throws JSONException { + super.onRequestPermissionResult(requestCode, permissions, grantResults); + if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ + //用户允许 + }else { + Toast.makeText(cordova.getActivity(),"您已决绝",Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/www/PermissionsPlugin.js b/www/PermissionsPlugin.js new file mode 100644 index 0000000..055b084 --- /dev/null +++ b/www/PermissionsPlugin.js @@ -0,0 +1,14 @@ +/** + * Created by CrazyDong on 2017/11/2. + */ +var exec = require('cordova/exec'); + +module.exports = { + /*调用对比 + * js: cordova.exec(callbackContext.success, callbackContext.error, PluginName, action, args); + * java: public boolean execute(String action, JSONArray args, CallbackContext callbackContext) + * */ + addPermissions:function(action,success,err,args){ + exec(success,err, "PermissionsPlugin", action, args); + } +} \ No newline at end of file