三步搞定: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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。