通过自定义插件方式实现Android平台的动态申请权限功能

在上一章中完成了在Mui中调用Android原生的动态权限请求功能(Android动态申请权限的问题)。虽然说完成了功能,但是在使用上并不是十分的方便。比如说每次要请求权限的时候都要写类名和方法名去引用对应的类的方法。总这么写迟早都会感觉到恶心,虽然说复制粘贴是个好办法,那我们能不能复制粘贴也能少点代码呢?所以这里将会使用自定义插件的形式,来完成请求权限的功能。

一、添加自定义插件模块

说白了就是在原生工程里增加一个类,用于与JS交互。然后将这个类配置到dcloud_properties.xml文件中。然后Mui通过一些方式将这类进行了关联。然后我们就可以在html中调用这个类的相关方法了。这样我们就不用自己去import原生项目中的类了。

基于上一章的内容,这里我在项目中增加了两个类。这两个类的功能如下表所示。这两个类都继承Mui的5+SDK提供的StandardFeature这个类。(其实没必要创建两个类,建一个就可以,这里我只是为了方便)

作用

MineTestPlugin

用来设置对Mui开放的方法

MineTestService

用来初始化相关的配置

1.MineTestService类的作用及完整代码:

用于初始化在上一章引入的工具类库。代码如下:

package com.lyan.minemap

import android.content.Context

import android.os.Bundle

import com.blankj.utilcode.util.LogUtils

import com.blankj.utilcode.util.Utils

import io.dcloud.common.DHInterface.StandardFeature

/** * 用于初始化工具类库 * Created by Lyan on 18/3/28. */

class MineTestService : StandardFeature() {

override fun onStart(context: Context?, bundle: Bundle?, strings: Array?) {

super.onStart(context, bundle, strings)

context?.apply {

Utils.init(applicationContext)//初始化工具类库

LogUtils.w("onStart")

}

}

}

2.MineTestPlugin类的作用及完整代码:

用来配置申请权限的方法,然后给Mui调用(JSONArray中的数据是Mui中要传来的值,接收的顺序与传的顺序要一致。在Mui调用插件中的方法时,将要传的参数要放到数组中。然后在原生中对应方法中按顺序解析JSONArray后,拿到的数据就是Mui中传的参数)。代码如下:

package com.lyan.minemap

import com.blankj.utilcode.util.ObjectUtils

import com.blankj.utilcode.util.PermissionUtils

import org.json.JSONArray

import io.dcloud.common.DHInterface.IWebview

import io.dcloud.common.DHInterface.StandardFeature

import io.dcloud.common.util.JSUtil

/** * 插件模块 * Created by Lyan on 18/3/28. */

class MineTestPlugin : StandardFeature() {

/** * 用于申请权限的方法 */

fun permission(iWebview: IWebview, jsonArray: JSONArray) {

val callbackID = jsonArray.optString(1)//回调

val permissionsJsonArray = jsonArray.optJSONArray(0)//获取权限数据

val dataSize = permissionsJsonArray.length()//获取数据的数量

/** * 对参数进行下判断,没有相关参数就返回错误信息 */

if (ObjectUtils.isNotEmpty(permissionsJsonArray) && dataSize > 0) {

val permissions: Array = Array(dataSize, { i: Int -> "$i" })//初始化一个String数组

(0 until dataSize).forEach { permissions[it] = (permissionsJsonArray.optString(it)) }//解析数据将数据放到数组中

getPermissions(permissions, iWebview, callbackID)//申请权限

} else {

JSUtil.execCallback(iWebview, callbackID, "请填写要申请的权限!", JSUtil.ERROR, false)

}

}

/** * 申请权限 */

private fun getPermissions(permissions: Array, iWebview: IWebview, callbackID: String) {

PermissionUtils.permission(*permissions).callback(object : PermissionUtils.SimpleCallback {

/** * 权限请求成功 */

override fun onGranted() {

JSUtil.execCallback(iWebview, callbackID, "权限请求成功!", JSUtil.OK, false)

}

/** * 权限请求失败 */

override fun onDenied() {

JSUtil.execCallback(iWebview, callbackID, "权限请求失败!", JSUtil.ERROR, false)

}

}).request()

}

}

3.将自定义的插件配置到dcloud_properties.xml中

属性名

属性功能

name

用来设置插件的名称,作用相当于标识

value

要引用类的包名+类名

二、配置和引用插件

接下来回到HBuilder中,对项目的manifest.json进行配置,将自定义的插件配置进来。配置插件如下图所示:

对主界面的代码修改一下,以使用插件的形式。来完成申请地理位置权限,并获取当前地理位置结果的功能。完整代码如下:

获取地理位置信息

前三章的链接

android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...相关推荐

  1. 【学习笔记】mybatis自定义插件案例代码

    文章目录 插件介绍 案例 实体类: 定义插件: 测试: 插件介绍 插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为.插件通过动态代理机制,可以介入四大对 ...

  2. Android学习笔记(四):android画图之paint之setXfermode

    2019独角兽企业重金招聘Python工程师标准>>> setXfermode 设置两张图片相交时的模式 我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状. ...

  3. android自动化测试之手机自动化测试工具基本原理,学习笔记之Android自动化测试工具Monkey...

    编辑推荐: 本文来自于网络,介绍了自动化测试工具Monkey使用过程,Monkey命令参数说明,注意事项等知识. 一.Monkey简介 Monkey测试是Android平台下自动化测试的一种快速有效的 ...

  4. [Android]如何做一个崩溃率少于千分之三噶应用app(9)-Small插件化

    以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app(1)-module工程架构 [Android]如何做一个崩溃 ...

  5. 【ES实战】ES 插件包离线安装(本地文件)

    ES 插件包离线安装(本地文件) 文章目录 ES 插件包离线安装(本地文件) 使用安装命令安装 直接解压式 验证安装情况 常用的分词插件 analysis-ik analysis-pinyin ana ...

  6. unity2D动画-角色切片与2DAnimation插件做动画

    unity2D动画-角色切片做动画 写在前面的话 开发环境与准备 用角色切片做动画 终于可以Key动画了 2DAnimation插件做动画 总结 写在前面的话 更新 建议有复杂2D动画需求的话用spi ...

  7. 工作笔记:Android高德定位使用说明

    高德定位模块使用说明 权限和KEY 在AndroidManifest.xml添加权限,如果仅使用定位功能,其他不需要的权限可去掉. <!-- Normal Permissions 不需要运行时注 ...

  8. vue里面_Vue中如何使用自定义插件(plugin)

    Vue中如何使用自定义插件(plugin) 1.在根目录src下创建一个libs文件夹,在libs文件夹下面创建一个myPlugins文件夹,用来存放我们的自定义插件,在myPlugins文件夹下面再 ...

  9. vue尚品汇商城项目-day07【vue插件-49.(了解)自定义插件】

    文章目录 49.(了解)自定义插件 本人其他相关文章链接 49.(了解)自定义插件 自定义插件好处: 功能:用于增强Vue 本质:包含install方法的一个对象,install的第一个参数是Vue, ...

最新文章

  1. ESP32 OTA 策略的优点与可能的问题
  2. 遍历元素根据状态显示不同颜色
  3. GooglePerformanceTools--tcmalloc
  4. HTML学习笔记:贵美主页框架演示
  5. 基于JAVA+SpringMVC+MYSQL的报价管理系统
  6. ERP库存管理 华夏
  7. 一步一步搭建车型数据库小程序
  8. 2019年8月 华为鸿蒙,华为2019年开发者大会将于8月9日举行,期待鸿蒙吗?
  9. 电脑上游戏视频录制的方法
  10. mac下读取ntfs
  11. MaxScript分享|FBX骨架转Bip骨架脚本 动画无缝转换 (通吃Max9-2016版本)
  12. android流光字体实现,CSS3自定义动画实现流光文字特效
  13. 一文读懂 delete和delete[ ]
  14. 2009 中国七夕情人节 --期待
  15. APP - 支付宝怎么延时转账?能否撤回转账?
  16. java处理器,JAVA注解处理器
  17. java复习之tomcat配置详解
  18. 手机上测试空气质量的软件,PM2.5指数爆表:6款PM2.5手机查询软件实时监测空气质量...
  19. 网络爬虫-58同城·招聘联系电话js解密
  20. ffprobe获取视频帧信息中的pkt_pts、pkt_pts_time

热门文章

  1. android网络框架
  2. sql服务器时间不正确,使用更改 CPU 频率的实用工具或技术时,SQL Server 计时值可能不正确...
  3. Kaggle比赛(二)House Prices: Advanced Regression Techniques
  4. 解决gradle项目每次编译都下载gradle-x.x-all.zip gradle-x.x-bin.zip
  5. 【JAVA面试】java面试题整理(4)
  6. 洛谷4014最大/小费用最大流
  7. Oracle数据库表解锁语句
  8. 2.AsyncQueryHandler、内容提供者
  9. object-C控制语句
  10. 保护你的DLL和Code不被别人使用。