android与h5交互传递hook,个人总结之H5调用本地app

首先既然H5和本地app达到交互,所以得有个标识,通过这个标识来开启app ,这时候就需要我们app端在manifest中的入口activity中添加scheme,也就是类似标识是的,这时候网页端可以通过这个scheme来开启我们的app,但是如果想要给我们app传递参数的话,那么就不好使了,所以这时候还需要 添加host,就可以了,代码如下

android:host="hello"/>

这样就可以了,H5就可以打开我们的app了,当然既然人家给我们传递了参数,那么我们这边肯定要获取的吧,所以我们可以在入口activity中如下操作,来获取参数

Intent intent = getIntent();

Uri uri = intent.getData();

String scheme = intent.getScheme();

tv_web.setVisibility(View.GONE);

idnoH = uri.getQueryParameter("idno");

System.out.println(idnoH+"idno");

这里的idno就是H5那么传递参数的key,通过key来获取value

当然常用的还有使用webview来和js交互,这就很简单了, 首先我们要先对webview进行一些设置, 第一条很关键,true表示和js可以交互, false反之

WebSettings set = mWebView.getSettings();

set.setJavaScriptEnabled(true);//设置是否直接javascript格式

set.setDefaultZoom(ZoomDensity.MEDIUM); //----设置缩放级别

set.setDefaultTextEncodingName("UTF-8");//---设置编码格式

set.setAllowContentAccess(true);

set.setAppCacheEnabled(false);

set.setBuiltInZoomControls(false);

set.setUseWideViewPort(true);

set.setUseWideViewPort(true);

set.setLoadWithOverviewMode(true);

1. 先说下,js调用Android中的方法

//第一个参数是 供给js调用的类,第二个参数是js中要用到的调用这个类中的方法的对象,可以随便起

mWebView.addJavascriptInterface(new FromAndroid(context), "AndroidToJs");

说一下,这里的FromAndroid的这个类不能是内部类,不知为何,反正我先用的是内部类,是调不出来里面的方法,

/**

* 这是js从android调用方法的类

* @author Administrator

*

*/

public class FromAndroid {

Context context;

public FromAndroid(Context context){

this.context = context;

}

@JavascriptInterface

public void fromAndroid(String name){

MyToastUtils.show(context, name);

}

}

在JS中代码就更简单了

function showToast(){

AndroidToJs.fromAndroid("我是js调用android的吐司");

}

完毕!!!

2. 然后说下在Android中调用JS的方法

在Android中的代码其实很简单

//这是调用js中的方法

fragment7_btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mWebView.loadUrl("javascript:fromJS('嘎嘎')");

}

});

说明下, 这里fromJS()这个方法是JS中的方法名, 而里面的参数是android部分可以传给js的,然后就可以修改到网页中的内容,当然也可以不传,直接在js端写死了,android部分调用,直接显示就可以

在JS端的代码

function fromJS(param) {

alert(param);

document.getElementById('fromJS').innerHTML="我是android调用JS的方法";

showToast();

document.getElementById('fromJS').innerHTML=param;

}

这里的fromJS的这个ID其实就是一个div,为了就是直接显示出来,还如上面说的一样,如果不用android传参数,直接fromJS()这个方法中param就不用写,直接一个无参的方法,然后JS端这边类似"我是android调用的JS方法" 这样,写死就好了; 如果想用android传参,并显示,直接把param赋值给div就好了

完毕!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值