三步搞定:Vue.js调用Android原生操作
第一步:Android对Js的接口,新建AndroidInterfaceForJs.js
importandroid.content.Context; importandroid.os.Build; importandroid.os.Handler; importandroid.os.Looper; importandroid.support.annotation.RequiresApi; importandroid.util.Log; importandroid.webkit.JavascriptInterface; importandroid.webkit.ValueCallback; importandroid.widget.Toast; importcom.just.agentweb.AgentWeb; importcom.yidumedical.ui.activity.PAWebActivity; /** *Createdbyshibyon2018/1/24. */ publicclassAndroidInterfaceForJS{ privateHandlerdeliver=newHandler(Looper.getMainLooper()); privateAgentWebagent; privateContextcontext; publicAndroidInterfaceForJS(AgentWebagent,Contextcontext){ this.agent=agent; this.context=context; } @JavascriptInterface publicvoidcallAndroid(finalStringmsg){ deliver.post(newRunnable(){ @Override publicvoidrun(){ Log.i("Info","mainThread:"+Thread.currentThread()); Toast.makeText(context.getApplicationContext(),""+msg,Toast.LENGTH_LONG).show(); } }); Log.i("Info","Thread:"+Thread.currentThread()); } }
第二步:给WebView中的window注入对象(例子使用的是AgentWeb)
privatevoidinit(){ mAgentWeb=AgentWeb .with(this)//传入ActivityorFragment .setAgentWebParent(mLinearLayout,newLinearLayout.LayoutParams(-1,-1))//传入AgentWeb的父控件,如果父控件为RelativeLayout,那么第二参数需要传入RelativeLayout.LayoutParams,第一个参数和第二个参数应该对应。 .useDefaultIndicator()//使用默认进度条 .defaultProgressBarColor()//使用默认进度条颜色 .createAgentWeb()// .ready() .go(baseURL); //注入对象 mAgentWeb.getJsInterfaceHolder().addJavaObject("android",newAndroidInterfaceForJS(mAgentWeb,this.getApplicationContext())); AgentWebSettingsagentWebSettings=mAgentWeb.getAgentWebSettings(); agentWebSettings.getWebSettings().setDomStorageEnabled(true); } 注入对象: //注入对象 mAgentWeb.getJsInterfaceHolder().addJavaObject("android",newAndroidInterfaceForJS(mAgentWeb,this.getApplicationContext()));
第三步:在Vue里面直接调用方法(简单粗暴法):
window.android.callAndroid('调用成功,耶!!!')
考虑到项目的可维护性,一般不这样写。
优雅法:
新建app.js
constandroid=window.android
export{android}
将window.android存在该模块,方便更改
然后在需要的.js或者.vue文件中,导入app模块,然后使用
import{android}from'../app' try{ android.callAndroid('调用成功,耶!!!') }catch(e){ console.log('出现错误,如果在非android环境下访问,出现该警告是正常的.') }
补充知识:vue与原生安卓相互调用
最近公司有做直播类的项目,由于直播框架限制,限制所用的技术是vue搭建的H5页面嵌入到原生安卓中。由于之前没有过类似的混合开发经验,所以今天写篇博客加深下印象。
vue.js调用安卓方法
先将vue项目放到一个内网地址或者外网地址中,然后安卓端通过“webView.loadUrl()”将vue项目引入。安卓端将要调用的方法名暴露在window对象中,由vue直接在methods中调用并携带参数。
methods:{ goPublish(){ //将vue项目引入至安卓代码中,安卓方法暴露在window中,vue中可以直接用window去调取方法。 window.android.callAndroidMethod('1','2') } }
安卓调用vue.js中的方法
同样的vue也需要把方法添加到window中去,再由安卓端去调取方法。
created(){ //需要在created钩子中将方法添加到window对象中 window.setFun=this.setFun; }, methods:{ setFun(arg){ //arg:原生调用Vue时传值(arg)给Vue console.log("获取到android的传参:"+arg); }, }
以上就是vue与安卓端项目调用的大致方法,有用词不当的地方望海涵且不吝指正。希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。