首页

文章

android与js交互实现什么功能

发布网友 发布时间:2022-04-19 20:27

我来回答

3个回答

懂视网 时间:2022-04-23 08:56

本篇文章介绍的内容是关于android 与js的简单交互的代码,现在分享给大家,有需要的朋友参考一下

权限:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


MainActicity:

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;


/**
 * 注意事项:如何避免WebView内存泄露?
 * 不在xml中定义 Webview ,而是在需要的时候在Activity中创建,并且Context使用 getApplicationgContext()
 * <p>
 * 在 Activity 销毁( WebView )的时候,
 * 先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {


 private WebView web;
 private Button but;
 private Button but2;
 private WebSettings settings;
 private Button but3;




 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 but = findViewById(R.id.but);
 but2 = findViewById(R.id.but2);
 but3 = findViewById(R.id.but3);
 web = findViewById(R.id.web);




 but.setOnClickListener(this);
 but2.setOnClickListener(this);
 but3.setOnClickListener(this);


 //声明WebSettings子类
 settings = web.getSettings();
 //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
 settings.setJavaScriptEnabled(true);
 //设置自适应屏幕,两者合用
 settings.setUseWideViewPort(true); //将图片调整到适合webview的大小
 settings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
 // 设置与Js交互的权限
 settings.setJavaScriptEnabled(true);
 // 设置允许JS弹窗
 settings.setJavaScriptCanOpenWindowsAutomatically(true);
 // 先载入JS代码

 // 复写shouldOverrideUrlLoading()方法,使得打开网页时不调用系统浏览器, 而是在本WebView中显示
 web.setWebViewClient(new WebViewClient() {
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
  view.loadUrl(url);
  return true;
  }
 });




 // 由于设置了弹窗检验调用结果,所以需要支持js对话框
 // webview只是载体,内容的渲染需要使用webviewChromClient类去实现
 // 通过设置WebChromeClient对象处理JavaScript的对话框
 //设置响应js 的Alert()函数(回调方法)
 web.setWebChromeClient(new WebChromeClient() {
  @Override
  public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
  AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);
  b.setTitle("Alter");
  b.setMessage(message);
  b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
   result.confirm();
   }
  });
  b.setCancelable(false);
  b.create().show();
  return true;
  }
 });










 }


 @Override
 public void onClick(View view) {
 switch (view.getId()) {
  //获取本地html文件
  case R.id.but:
  web.loadUrl("file:///android_asset/index.html");
  break;
  //与js交互
  case R.id.but2:


  web.post(new Runnable() {
   @Override
   public void run() {
    // 格式规定为:file:///android_asset/文件名.html
    web.loadUrl("file:///android_asset/webview.html");
    web.loadUrl("javascript:callJs()");


   }
   });




  break;
  case R.id.but3:
  web.loadUrl("http://www.baidu.com/");


  break;


 }




 }




 //销毁
 @Override
 protected void onDestroy() {
 if (web != null) {
  web.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
  web.clearHistory();


  ((ViewGroup) web.getParent()).removeView(web);
  web.destroy();
  web = null;
 }


 super.onDestroy();
 }
}


xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context="com.example.webview_js.MainActivity">


 <Button
 android:id="@+id/but"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="点我调用本地html文件" />


 <Button
 android:text="点我调用网站"
 android:id="@+id/but3"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" />


 <Button
 android:id="@+id/but2"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="点我与Js交互" />


 <WebView
 android:id="@+id/web"
 android:layout_width="match_parent"
 android:layout_height="match_parent"></WebView>




</LinearLayout>


html文件(js):
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			
			function callJs(){
				alert("android调用了JS的call方法")
			}
			
		</script>
	</head>
	<body>
		
		
	</body>
</html>

热心网友 时间:2022-04-23 06:04

Android与js交互可以互通信息
互通信息的就是你可以告诉我做什么或者我可以让你做什么
具体功能:一个是可以实现热更新,通过js创建Android组件并对出错的信息进行实时修复。
还有个是两方可以互通API调用,把js的灵活性和native的易用性结合

热心网友 时间:2022-04-23 07:22

第一步:
mainfest.xml中加入网络权限

[java] view plain copy
<uses-permission android:name="android.permission.INTERNET" />
第二步:

加载本地写好的html文件(定义好js中提供给android调用的方法 funFromjs(),和android提供给js调用的对象接口fun1FromAndroid(String name)),放在 assets目录下。

[html] view plain copy
<body>
<a>js中调用本地方法</a>
<script>

function funFromjs(){
document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";
}
var aTag = document.getElementsByTagName('a')[0];
aTag.addEventListener('click', function(){
//调用android本地方法
myObj.fun1FromAndroid("调用android本地方法fun1FromAndroid(String name)!!");
return false;
}, false);
</script>
<p></p>
<div id="helloweb">

</div>
</body>

第三步:

实现android工程与js交互的相关代码
android主题代码:

[java] view plain copy
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
initViews();

//设置编码
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
mWebView.getSettings().setJavaScriptEnabled(true);
//设置背景颜色 透明
mWebView.setBackgroundColor(Color.argb(0, 0, 0, 0));
//设置本地调用对象及其接口
mWebView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");
//载入js
mWebView.loadUrl("file:///android_asset/test.html");

//点击调用js中方法
mBtn1.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
mWebView.loadUrl("javascript:funFromjs()");
Toast.makeText(mContext, "调用javascript:funFromjs()", Toast.LENGTH_LONG).show();
}
});

}
js调用的android对象方法定义

[java] view plain copy
public class JavaScriptObject {
Context mContxt;
@JavascriptInterface //sdk17版本以上加上注解
public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
}

public void fun1FromAndroid(String name) {
Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show();
}

public void fun2(String name) {
Toast.makeText(mContxt, "调用fun2:" + name, Toast.LENGTH_SHORT).show();
}
}
历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... js的框架能用到android开发中吗?比如echart,momen... 在Android上怎样实现JAVA和JS交互 孩子上户口 关于孩子上户口 孩子上户口怎么办 怎样给孩子上户口 小孩子上户口需要办理什么手续? 如何给孩子上户口? 孩子上户口需要什么资料 给孩子上户口需要什么条件 给孩子上户口需要什么证件 孩子上户口需要带什么证件 手机总是提示充电口潮湿,怎么回事 在手机上,删了文件管理里的文件,导致我哔哩哔哩... 三星note9手机检测到usb接口进水潮湿,充不进电怎么办? 减肥瘦身锻炼计划方法 怎样安排一周减肥计划 急求减肥计划一周表??? 减肥!减肥!求运动减肥一周计划。 瘦身(减肥)计划 怎样在Android开发中与js进行交互 在Android开发过程中搭建一个自己的应用框架有几个... android 混合开发 框架有哪些 什么是js框架? 安卓和javascript交互必须通过webView吗?可以用安... Android如何调用框架iframe里面的js方法 急急急急... 原生APP中js怎样与Android和ios进行交互 android与javascript的交互可以不通过webview吗 reactnative中android与js只进行数据交互该怎么做 android js交互获取不到Android的方法 Android使用WebView和JS交互的问题 androidwebview加载本地js怎么实现交互 android 前端框架有哪些 Android开发中有没有类似Web前端的UI框架 android和h5交互,js怎么在android端打印日志 敢当石襄错了怎样办 柳土獐的介绍 什么是沙笔? 暗黑剧情相关问题,灵魂之石. 为什么古代的文人比较喜欢养鹅而不是鸳鸯
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com