三步搞定:Vue.js调用Android原生操作


Posted in Javascript onSeptember 07, 2020

第一步: Android对Js的接口,新建AndroidInterfaceForJs.js

import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.widget.Toast;
import com.just.agentweb.AgentWeb;
import com.yidumedical.ui.activity.PAWebActivity;

/**
 * Created by shiby on 2018/1/24.
 */

public class AndroidInterfaceForJS {

 private Handler deliver = new Handler(Looper.getMainLooper());
 private AgentWeb agent;
 private Context context;

 public AndroidInterfaceForJS(AgentWeb agent, Context context) {
  this.agent = agent;
  this.context = context;
 }

 @JavascriptInterface
 public void callAndroid(final String msg) {
  deliver.post(new Runnable() {
   @Override
   public void run() {
    Log.i("Info", "main Thread:" + Thread.currentThread());
    Toast.makeText(context.getApplicationContext(), "" + msg, Toast.LENGTH_LONG).show();
   }
  });
  Log.i("Info", "Thread:" + Thread.currentThread());

 }

}

第二步: 给WebView中的window注入对象(例子使用的是AgentWeb)

private void init(){
 mAgentWeb = AgentWeb
   .with(this)//传入Activity or Fragment
   .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams ,第一个参数和第二个参数应该对应。
   .useDefaultIndicator()// 使用默认进度条
   .defaultProgressBarColor() // 使用默认进度条颜色
   .createAgentWeb()//
   .ready()
   .go(baseURL);
 //注入对象
 mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterfaceForJS(mAgentWeb,this.getApplicationContext()));
 AgentWebSettings agentWebSettings = mAgentWeb.getAgentWebSettings();
 agentWebSettings.getWebSettings().setDomStorageEnabled(true);
}
注入对象:
 //注入对象
 mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterfaceForJS(mAgentWeb,this.getApplicationContext()));

第三步:在Vue里面直接调用方法(简单粗暴法):

window.android.callAndroid('调用成功,耶!!!')

考虑到项目的可维护性,一般不这样写。

优雅法:

新建app.js

const android = 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与安卓端项目调用的大致方法,有用词不当的地方望海涵且不吝指正。希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
Feb 22 Javascript
JS图片无缝、平滑滚动代码
Mar 11 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
Mar 18 Javascript
jQuery实现根据类型自动显示和隐藏表单
Mar 18 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
Dec 03 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
jQuery实现返回顶部功能
Feb 23 Javascript
你应该了解的JavaScript Array.map()五种用途小结
Nov 14 Javascript
微信小程序实现拍照画布指定区域生成图片
Jul 18 Javascript
Vue性能优化的方法
Jul 30 Javascript
浅析vue中的nextTick
Dec 28 Vue.js
vue单应用在ios系统中实现微信分享功能操作
Sep 07 #Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
Sep 07 #Javascript
一篇文章带你从零快速上手Rollup
Sep 07 #Javascript
基于vue hash模式微信分享#号的解决
Sep 07 #Javascript
在项目vue中使用echarts的操作步骤
Sep 07 #Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
Sep 07 #Javascript
Vue.js原理分析之nextTick实现详解
Sep 07 #Javascript
You might like
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
js css样式操作代码(批量操作)
2009/10/09 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
应届生幼儿园求职信
2013/11/12 职场文书
男女朋友协议书
2014/04/23 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
安全目标管理责任书
2014/07/25 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
授权委托书
2015/01/28 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
angular异步验证器防抖实例详解
2022/03/31 Javascript
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers