android 匿名函数,android h5 js 匿名函数通信

android js 互相调用

支持js匿名函数接收

支持js json对象接收

支持js函数返回值获取

通过注解注入js方法,支持自定义方法名

Add it in your root build.gradle at the end of repositories:

allprojects {

repositories {

...

maven { url 'https://jitpack.io' }

}

}

Add the dependency

dependencies {

// 最新版本 26e67c0c78

compile 'com.github.lwugang:android-js-bridge:26e67c0c78'

}

使用方式

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/web_view"/>

Activity

A对象表示注入的插件对象,必须实现JsPlugin接口,所有需要注入的方法必须加 @JsInject 注解标记

或者在类上声明@JsInject 该类中的所有public就会被注入

如果该类中的方法不希望被注入可以 对方法加上@NoInject注解

package com.src.wugang.jsbridge;

import android.content.Intent;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.widget.Toast;

import com.wugang.jsbridge.library.BridgeWebView;

import com.wugang.jsbridge.library.JSFunction;

import com.wugang.jsbridge.library.JsPlugin;

import com.wugang.jsbridge.library.JsReturnValueCallback;

import com.wugang.jsbridge.library.anno.JsInject;

import com.wugang.jsbridge.library.utils.ImagePickerPluginUtils;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {

private ImagePickerPluginUtils imagePickerPlugin ;

@Override protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

BridgeWebView webView = (BridgeWebView) findViewById(R.id.web_view);

webView.addJavascriptInterface(new A(), "android");

webView.addJavascriptInterface(new B(), "ui");

webView.loadUrl("file:///android_asset/test.html");

imagePickerPlugin = ImagePickerPluginUtils.getInstance(this);

}

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

imagePickerPlugin.onActivityResult(requestCode,resultCode,data);

}

@JsInject

public class A implements JsPlugin {

public String getResult() {//不支持此中方式返回数据给js

return "getResult";

}

public void testFun(JSFunction jsFunction){

jsFunction.execute("testFun");

}

@JsInject("ddd")//注入方法重命名

public void testFunReturn(JSFunction jsFunction){

jsFunction.execute(new JsReturnValueCallback() {

@Override public void onReturnValue(String result) {

Toast.makeText(MainActivity.this,result,0).show();

}

},"testFunReturn");

}

}

public class B implements JsPlugin {

@JsInject("showImagePicker")

public void test(String data,JSFunction function) {

Toast.makeText(getApplicationContext(), data + "--", 1).show();

JSONObject jsonObject = new JSONObject();

try {

jsonObject.put("loginState",true);

JSONArray array = new JSONArray();

array.put(data);

jsonObject.put("arr",array);

} catch (JSONException e) {

e.printStackTrace();

}

function.execute(jsonObject);

}

}

}

HTML&JS代码

function test(){

ui.showImagePicker("showImagePicker",function(d){

alert(d)

// document.getElementById('img01').src='data:image/png;base64,'+JSON.parse(d).images[0];

});

}

function testFun(){

android.testFun(function(data){

alert(data);

});

}

function testFunReturn(){

android.ddd(function(data){

alert(data);

return "testFunReturn";

});

}

function getResult(){//这种形式是获取不到数据的

var result = android.getResult();

alert(result);

}

getResult

testFun

testFunReturn

select img

问题记录

Android7.0 webview 不会调用此方法

@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {

}

Android7.0 需要重写此方法

@Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值