28人参与 • 2025-05-28 • Javascript
在 android 开发中,javascript(js)调用原生 android 接口主要通过 webview 组件实现。以下是常见的 3 种核心方式及具体实现逻辑:
原理:通过 webview 向 js 暴露一个 java 对象,js 可直接调用该对象中被 @javascriptinterface
注解标记的方法
步骤:
public class webappinterface { context mcontext; webappinterface(context c) { mcontext = c; } @javascriptinterface public void showtoast(string msg) { toast.maketext(mcontext, msg, toast.length_short).show(); } }
webview.getsettings().setjavascriptenabled(true); webview.addjavascriptinterface(new webappinterface(this), "androidbridge");
window.androidbridge.showtoast("hello from js!");
注意事项:
@javascriptinterface
注解,可能导致任意方法被调用(如系统敏感 api)原理:通过重写 webchromeclient
的对话框回调方法(如 onjsprompt
),解析 js 发送的指令
步骤:
webview.setwebchromeclient(new webchromeclient() { @override public boolean onjsprompt(webview view, string url, string message, string defaultvalue, jspromptresult result) { if (message.startswith("native:")) { // 协议约定 handlenativecall(message); // 解析并执行原生逻辑 result.confirm("success"); // 返回结果给 js return true; } return super.onjsprompt(view, url, message, defaultvalue, result); } });
prompt("native:showtoast", "{'msg':'hello'}"); // 通过 prompt 发送指令
适用场景:
@javascriptinterface
)原理:js 触发特定格式的 url 请求(如 myapp://action?params
),android 通过 shouldoverrideurlloading
拦截并处理
步骤:
webview.setwebviewclient(new webviewclient() { @override public boolean shouldoverrideurlloading(webview view, string url) { if (url.startswith("myapp://")) { // 协议约定 parseurl(url); // 解析 url 并执行对应逻辑 return true; // 阻止默认加载 } return super.shouldoverrideurlloading(view, url); } });
window.location.href = "myapp://showtoast?msg=hello"; // 或通过 iframe 触发
优缺点:
到此这篇关于javascript调用android接口常见的3种方式的文章就介绍到这了,更多相关js调用android接口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论