android apicloud 自定义插件

来源:互联网 发布:如何防止域名被劫持 编辑:程序博客网 时间:2024/05/16 03:48

本文简单介绍使用as写一个简单的自定义apicloud模块(其中的示例是一个获取蓝牙地址的demo).

首先看一下目录结构:


红色方块内的是需要编写的,首先新建项目并添加一个module(Android Library类型)并添加依赖,新建一个任意名称Java文件写插件,module内存放的是java类的路径和调用的js名称(在我看来就是模块名称).

先看java文件:

/** * Created by th2 on 2017/8/15. * 本地蓝牙地址 */public class LocalBlueAddressDemo extends UZModule{    public LocalBlueAddressDemo(UZWebView webView) {        super(webView);    }    public void jsmethod_localBlueAddress(final UZModuleContext moduleContext){        JSONObject json = new JSONObject();        try {            json.put("blueaddress",getBtAddressViaReflection());        } catch (JSONException e) {            e.printStackTrace();        }        moduleContext.success(json,true);    }    private String getBtAddressViaReflection() {        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();        Object bluetoothManagerService = new Mirror().on(bluetoothAdapter).get().field("mService");        if (bluetoothManagerService == null) {            Log.w("TAG", "couldn't find bluetoothManagerService");            return null;        }        Object address = new Mirror().on(bluetoothManagerService).invoke().method("getAddress").withoutArgs();        if (address != null && address instanceof String) {            Log.w("TAG", "using reflection to get the BT MAC address: " + address);            return (String) address;        } else {            return null;        }    }}

首先这个类必须继承UZModule并且方法名必须是jsmethod_方法名,如果不是上述类型是检测不到你的方法的,在其中你可以使用moduleContext.success()使用成功回调,这里是一个简单的获取蓝牙地址的方法.

然后看module.json:

{   name:'taihuaBlueDemo',   class:'com.example.bluelibrary.LocalBlueAddressDemo'}

其中name就是插件的名称,class就是java的路径(包名+类名),注意,这里有个坑是不能按照官方的demo那样写成中括号类型的.然后rebuild一下项目(前提是你已经在项目中添加了依赖).


然后你会在bluelibrary>build>intermediates>bundles>release文件下找到一个classes.jar的文件,这个文件就是你生成的jar(当然可以改成任意名称).

然后你需要创建一个文件夹用来存放模块,其中文件夹名称就是模块名称.下面是文件夹目录结构:


res_blueDemo用来存放你的资源文件和AndroidManifest.xml,source里面存放你刚才获得的jar文件.然后将整个文件压缩.然后只要上传就可以了

js的调用时:

var demo = api.require('*******');demo.localBlueAddress(function (ret, err) {    });

****就是模块的名字,localBlueAddress是方法的名称.

划重点!!!!!!!其中遇到的一个大坑,在我的插件中我使用的三方的依赖,导致我每次调用的时候都是报错.

比如说我在获取蓝牙地址的时候使用了mirror-1.6.1.jar这个文件,只需要下载它的jar文件再将它加入到source文件中就可以了,天啊撸,浪费了我好长的时间.

原创粉丝点击