Mui本地打包笔记(三)Android动态申请权限的问题(以获取地理位置信息为例)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_32377671/article/details/79727705

使用Mui调用Android拓展方法来完成动态申请权限的功能



说白了还是JS与原生交互,只不过这里mui为我们封装了好了交互的功能,我们只需要知道如何调用就行了,这里将会以上一章的内容为基础,因为为了做本章的准备已经将如何引入Html5+插件的配置,在上一章进行了说明(Mui本地打包笔记(二)集成第三方SDK(以百度地图为例))。这一章将会以获取地理位置信息来演示如何动态请求权限。

为了方便这里我用了一个第三方的工具类库。功能十分丰富(传送门)。在项目中引入【implementation ‘com.blankj:utilcode:1.13.5’】。

这里写图片描述
  这里注意一下,如果各位用的库的版本跟我相同的话,初始化的方法是这样的。方法的参数传的Context类型的对象。
这里写图片描述
  如果版本低于我使用的版本的话,初始化的传入的参数是Application类型的对象(具体从那个版本变得这个我倒是不清楚)。如果要用到这个库请注意一下初始化这块。
这里写图片描述

一、在Android原生项目中增加要被调用方法:

这里我创建了一个工具类,添加了一个用于初始化工具类库的方法和请求权限的方法。

package com.lyan.minemap;

import android.content.Context;

import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ObjectUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.Utils;

/**
 * Created by Lyan on 18/3/28.
 */

public class Tools {

    /**
     * 请求权限的回调
     */
    interface CallBack{
        void success();
        void failure();
    }

    /**
     * 初始化工具类
     * @param context
     */
    public static void initUtils(Context context){
        Utils.init(context.getApplicationContext());
    }

    /**
     * 想要申请的权限
     * @param permissions
     */
    public static void permission(String[] permissions, final CallBack callBack){
        PermissionUtils.permission(permissions).callback(new PermissionUtils.SimpleCallback() {
            /**
             * 权限请求成功
             */
            @Override
            public void onGranted() {
                if (ObjectUtils.isNotEmpty(callBack)) callBack.success();
                LogUtils.i("权限请求成功!");
            }

            /**
             * 权限请求失败
             */
            @Override
            public void onDenied() {
                if (ObjectUtils.isNotEmpty(callBack)) callBack.failure();
                LogUtils.i("权限请求失败!");
            }
        }).request();
    }
}

二、在Mui项目里添加一个界面并添加一个获取位置信息的功能:

创建一个新的界面,创建完了之后将这个新建的界面设为程序的入口,界面中的代码如下(在manifest.json文件中设置):

<!doctype html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<link href="css/mui.min.css" rel="stylesheet" />
	</head>

	<body>
		<button id="getloc">获取地理位置信息</button>

		<script src="js/mui.min.js"></script>
		<script type="text/javascript">
			mui.init()
			mui.plusReady(function() {
				//初始化工具类库
				var mainAct = plus.android.runtimeMainActivity();
				//参数一:包名+类名
				//参数二:方法名s
				//参数三:对应java方法的参数
				plus.android.invoke("com.lyan.minemap.Tools", "initUtils", mainAct);
			});

			mui("#getloc")[0].addEventListener("tap", function() {
				//设置回调函数
				var callBack = plus.android.implements("com.lyan.minemap.Tools$CallBack", {
					"success": function() {
						//申请权限成功或已经获取到了权限都会执行到这里
						//所以在这一步直接获取地理信息即可
						plus.geolocation.getCurrentPosition(function(p) {
							//获取地理位置成功,弹出省份和城市
							alert(p.address.province + p.address.city);
						}, function(e) {
							alert("获取位置信息失败" + e.message);
						});
					},
					"failure": function() {
						mui.alert("权限请求失败!");
					}
				});
				//调用申请权限的静态方法
				plus.android.invoke("com.lyan.minemap.Tools", "permission", ["android.permission-group.LOCATION"], callBack);
			});
		</script>
	</body>

</html>

三、效果演示:

这样在Mui中调用原生动态申请权限的功能就完成了,这里放一张效果图。

这里写图片描述

四、申请权限的字符串

在上面测试的网页中,在申请权限的部分添加了这么一个字符串“android.permission-group.LOCATION”,这个可不是随便填写的。
这里写图片描述
这里写图片描述

五、总结

虽然以这种方式完成了动态请求权限的功能,但是MUI提供了自定义插件的方式。如果以插件的方式使用权限请求的功能,那么会节省不少代码,尤其是有多个地方需要申请权限的时候(脑补即可)。所以下一章Mui本地打包笔记(四)Android自定义插件的配置将会以自定义插件的形式实现动态权限的申请。

猜你喜欢

转载自blog.csdn.net/baidu_32377671/article/details/79727705
今日推荐