js调用Android类,JS调用Android方法.txt

以下Alert()。Confirm()。Prompt()方法都可以进行JS-APP通信: 本次使用Prompt 方式传参,具体往下看

function call(){

var value = document.getElementById("input").value;

alert(value);

}

//警告

function onAlert(){

alert("This is a Alert");

}

//确定

function onConfirm(){

var b = confirm("Understand?");

}

//提示

function onPrompt(){

var b = prompt("Tip","Default");

}

点我弹出Alert

1.添加点击事件:

参数1:与APP通信约定:"js://将要调用的APP内部方法名"(如:"js://OpenNewDetails",OpenNewDetails就是APP内部方法了)

参数2:提示对话框中显示的默认值,改为提供给APP默认数据使用,如:加密后的uid

2.编写JS:

//方法演示A:

function onPrompt(参数1,参数2){

var result = prompt("参数1", "参数2");

}

//方法B例:调用APP方法,【不添加额外参数】,如("js://OpenNewDetails","+BdFzRomKfE=")

var result = prompt("js://OpenNewDetails","+BdFzRomKfE=");

//方法C例:调用APP方法,【添加额外参数】,如("js://OpenNewDetails?aid=66&title=XXX","+BdFzRomKfE=")

var result = prompt("js://OpenNewDetails?aid=66&title=北斗导航系统的重要性","+BdFzRomKfE=");

附:

Android 调用 JS: loadUrl("javascript:onJsMethod("str",12)");

Html加载进度:

android:id="@+id/myProgressBar"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="match_parent"

android:layout_height="2dp"

android:progressDrawable="@drawable/progress_horizontal" />

添加progress_horizontal.xml

android:id="@android:id/background"

android:drawable="@drawable/bg_default_white" />

android:endColor="#6efb89"

android:startColor="#6efb89" />

设置进度,设置HTML视频背景,设置交互

extends WebChromeClient {

@Override

public void onProgressChanged(WebView view, int newProgress) {

super.onProgressChanged(view, newProgress);

// Activity的进度范大于或等于100表示页面加载完成

if (newProgress == 100) {

if (mProgressBar != null) {

mProgressBar.setVisibility(View.GONE);

}

} else {

if (mProgressBar != null) {

if (View.GONE == mProgressBar.getVisibility()) {

mProgressBar.setVisibility(View.VISIBLE);

}

mProgressBar.setProgress(newProgress);

}

}

}

@Nullable

@Override

public Bitmap getDefaultVideoPoster() {

try {

//加载H5视频,解决出现灰色背景和大黑色播放按钮背景问题

return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);

} catch (Exception e) {

return super.getDefaultVideoPoster();

}

}

@Override

public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {

try {

ActivityUtils.analysisJs(mContext, message);

result.cancel();//点击了取消按钮

return true;

} catch (Exception e) {

LogUtil.iYx("解析H5Message失败" + e.getMessage());

}

//放行Prompt();

return super.onJsPrompt(view, url, message, defaultValue, result);

}

}

添加解析方法:analysisJs()

/**

* 解析H5中的约定

* js://->约定

* OpenNewDetails->方法

* aid=10&device=huawei->问号后面传参

* uid->默认参数

* @param str prompt(js://OpenNewDetails?aid=10&device=huawei,uid)

*/

public static void analysisJs(Context mContext, String str) {

//1.判断是否是JS

int index = str.indexOf(":");

String protocol = str.substring(0, index);

if ("js".equals(protocol)) {

LogUtil.iYx("-----Js_Prompt:拦截-----");

//2. 获取Url中的方法名

String methodStr = "";

int indexEnd = str.indexOf("?");

LogUtil.iYx("-----?号下标-------" + indexEnd);

if (indexEnd < 0) {

//在Url中没有?号表示没有参数

methodStr = str.substring(5);//直接从5号下标截取到末尾

} else {

methodStr = str.substring(5, indexEnd);//截取到方法名

}

//3.判断调用哪个方法

if (methodStr.contains("OpenNewDetails")) {

//4.获取方法中的参数

if (indexEnd > 0) {

//有参数,获取到拼接的完整参数:aid=10&device=huawei

String dataStr = str.substring(indexEnd + 1);

String[] dataAry = dataStr.split("&");

//参数集合

HashMap dataMap = new HashMap<>(dataAry.length);

for (String d : dataAry) {

String[] mAry = d.split("=");

dataMap.put(mAry[0], mAry[1]);

}

//5.打开新的H5

if (dataMap.size() > 0) {

String aid = dataMap.get("aid");

if (!TextUtils.isEmpty(aid)) {

toWebViewActivity(mContext, aid, "科普详情");

}

}

}

}

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值