Mr_ZY
Mr_ZY
  • 发布:2018-01-23 19:41
  • 更新:2018-01-24 20:49
  • 阅读:2586

权限问题:能不能手动请求权限,或者判断有没有某个权限

分类:Native.js

之前APP用的是Eclipse打包,SDK版本是20的,运行的时候遇到有权限的地方会提示权限请求,是否允许,现在改用AS Gradle打包,SDK版本改为26,再运行的时候遇到有权限的地方就没有提示是否允许该权限了,系统设置里的权限访问方式是询问,需要手动把设置里的权限改为允许APP才能正常运行。求解怎么样判断权限有没有并手动请求。

2018-01-23 19:41 负责人:无 分享
已邀请:
Mr_ZY

Mr_ZY (作者)

果然还是得靠自己,原因是Android6.0以后打包的APP需要在代码中申请权限,而不是在安装的时候就授予权限。
最终找到了这篇文章:
http://ask.dcloud.net.cn/article/1365
原贴有源代码

配合官方提供的http://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.checkPermission权限判断方法一起使用就可以实现了,下面贴出我的主要代码:

    // 我在原贴作者代码中加了一个一次请求APP全部所需权限的方法(PermissionUtils.java)  
    public void requestMultiPermissions() {  
        if (mActivity != null && Build.VERSION.SDK_INT >= 23) {  
            PermissionGrant permissionGrant = new PermissionGrant() {  
                @Override  
                public void onPermissionGranted(int requestCode) {  
                    if (requestWebViewPremissionListener != null) {  
                        requestWebViewPremissionListener.requestPremissionCallBack(CODE_MULTI_PERMISSION);  
                    }  
                }  
            };  

            mActivity.setPermissionGrant(permissionGrant);  

            requestMultiPermissions(mActivity, permissionGrant);  

        } else if (Build.VERSION.SDK_INT < 23) {  
            if (requestWebViewPremissionListener != null) {  
                requestWebViewPremissionListener.requestPremissionCallBack(CODE_MULTI_PERMISSION);  
            }  
        } else {  
            Log.w(TAG, "WebView  requestWebViewPremission error ,安卓运行版本:" + Build.VERSION.SDK_INT);  
        }  
    }
    /**  
     * 请求权限  
     * @param {Number} requestCode  
     * @param {Function} [func]  
     */  
    static requestAndroidPremission(requestCode, func) {  
        if (!this.__permissionUtils) {  
            this.__permissionUtils = plus.android.newObject("your.package.PermissionUtils");  
        }  
        var requestAndroidPremissionCallBack = function (requestCode) {  
            typeof func === 'function' && func(requestCode)  
        };  

        // 实现原生接口PermissionUtils.RequestWebViewPremissionListener对象  
        var hevent = plus.android.implements("cn.xjkj.feibo.PermissionUtils$RequestWebViewPremissionListener", {  
            "requestPremissionCallBack": function (requestCode) {  
                requestAndroidPremissionCallBack(requestCode);  
            }  
        });  
        plus.android.invoke(this.__permissionUtils, 'setRequestWebViewPremissionListener', hevent);  
        plus.android.invoke(this.__permissionUtils, "requestWebViewPremission", requestCode);  
    }  

    /**  
     * 请求多项权限  
     * @param [func]  
     */  
    static requestMultiAndroidPermissions(func) {  
        if (!this.__permissionUtils) {  
            this.__permissionUtils = plus.android.newObject("cn.xjkj.feibo.PermissionUtils");  
        }  
        var requestAndroidPremissionCallBack = function (requestCode) {  
            typeof func === 'function' && func(requestCode)  
        };  
        // 实现原生接口PermissionUtils.RequestWebViewPremissionListener对象  
        var hevent = plus.android.implements("your.package.PermissionUtils$RequestWebViewPremissionListener", {  
            "requestPremissionCallBack": function (requestCode) {  
                requestAndroidPremissionCallBack(requestCode);  
            }  
        });  
        plus.android.invoke(this.__permissionUtils, 'setRequestWebViewPremissionListener', hevent);  
        plus.android.invoke(this.__permissionUtils, "requestMultiPermissions");  
    }

该问题目前已经被锁定, 无法添加新回复