android apicloud 自定义插件

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

首先看一下目录结构:

 

 

android apicloud 自定义插件_第1张图片

红色方块内的是需要编写的,首先新建项目并添加一个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一下项目(前提是你已经在项目中添加了依赖).

android apicloud 自定义插件_第2张图片

 

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

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

android apicloud 自定义插件_第3张图片

 

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

 

js的调用时:

 

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

 

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

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

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

你可能感兴趣的:(安卓)