package com.hhzt.iptv.adservice;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.ViewGroup;
import android.webkit.ConsoleMessage;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView; /**
* Created by Administrator on 2019-04-16.
*/ public class AdActivity extends Activity { private WebView mWebView;
private WebSettings mWebSetting;
TextView beginLoading,endLoading,loading,mtitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ad);
mWebView = (WebView)findViewById(R.id.webView1);
beginLoading = (TextView) findViewById(R.id.text_beginLoading);
endLoading = (TextView) findViewById(R.id.text_endLoading);
loading = (TextView) findViewById(R.id.text_Loading);
mtitle = (TextView) findViewById(R.id.title);
mWebSetting = mWebView.getSettings();
mWebSetting.setJavaScriptEnabled(true); /**
* 传一个Android对象给JS,JS拿到对象以后就可以调用你传递的对象里面的方法
*/
mWebView.addJavascriptInterface(new MyWeb(),"test");//AndroidtoJS类对象映射到js的test对象
mWebView.loadUrl("file:///android_asset/index.html"); /**
* (2) WebViewClient类(主要作用是:处理各种通知 & 请求事件)
*/
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//使得打开网页时不调用系统浏览器, 而是在本WebView中显示
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
} @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//设定加载开始的操作
// super.onPageStarted(view, url, favicon);
System.out.println("开始加载了");
beginLoading.setText("开始加载了");
} @Override
public void onPageFinished(WebView view, String url) {
//设定加载结束的操作
// super.onPageFinished(view, url);
endLoading.setText("结束加载了");
// Android版本变量
final int version = Build.VERSION.SDK_INT;
/**
* 因为该方法在 Android 4.4 版本才可使用,所以使用时需进行版本判断
* android 调用JS代码。需要在webview也没加载完成时调用,否则无效
*/
if (version < 18) {
mWebView.loadUrl("javascript:callAndroid()");
} else {
mWebView.evaluateJavascript("javascript:callAndroid()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.i("TAG","onReceiveValue:"+value);
}
});
}
} @Override
public void onLoadResource(WebView view, String url) {
//设定加载资源的操作
super.onLoadResource(view, url);
} @Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { } @Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
//该方法传回了错误码,根据错误类型可以进行不同的错误分类处理
Log.i("TAG","onReceivedError:"+errorCode);
super.onReceivedError(view, errorCode, description, failingUrl);
}
}); /**
* (3) WebChromeClient类( 作用:辅助 WebView 处理 Javascript 的对话框,网站图标,网站标题等等。)
*/
mWebView.setWebChromeClient(new WebChromeClient(){ @Override
public void onProgressChanged(WebView view, int newProgress) {
Log.i("TAG","onProgressChanged:"+newProgress);
if (newProgress < 100) {
String progress = newProgress + "%";
loading.setText(progress);
} else if (newProgress == 100) {
String progress = newProgress + "%";
loading.setText(progress);
}
}
//获取网站标题
@Override
public void onReceivedTitle(WebView view, String title) {
// super.onReceivedTitle(view, title);
System.out.println("标题在这里");
mtitle.setText(title);
}
//获取网站logo
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
} @Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.i("TAG","onConsoleMessage:"+consoleMessage.message()+ "-- from line "+consoleMessage.lineNumber()+" of "+consoleMessage.sourceId());
//这个方法返回Webview加载JS时的日志信息
return super.onConsoleMessage(consoleMessage);
} }); } @Override
protected void onResume() {
super.onResume(); } //销毁Webview
@Override
protected void onDestroy() {
if (mWebView != null) {
// mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
mWebView.clearHistory();
((ViewGroup) mWebView.getParent()).removeView(mWebView);
mWebView.destroy();
mWebView = null;
}
super.onDestroy();
} //点击返回上一页面而不是退出浏览器
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
} index.hdml界面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Carson</title>
</head>
<body>
//点击按钮则调用callAndroid函数
<button onclick="callAndroid()"></button>
</body>
<script>
function callAndroid(){
// 由于对象映射,所以调用test对象等于调用Android映射的对象,注意此处不能定义test,如果定义的那就是一个新的对象,将会提示无法找到hello方法
test.hello("js调用了android中的hello方法");
}
</script>
</html>
友情提示:修改index.html文件时,记得clean project一下,因为你运行时间AS编译器不会去编译assets里面的文件,或者在项目的build.gradle加上
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java', 'src/main/aidl']
resources.srcDirs = ['src/main/java', 'src/main/aidl']
aidl.srcDirs = ['src/main/aidl']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
}

Android为TV端助力之Webview与JS双向交互的更多相关文章

  1. Android为TV端助力之WebView开发踩坑一

    在Android清单配置文件里面 自定义application时,在4.4系统上面不能加上一个属性,见下图 否则界面将不会显示任何数据,在更高或者更低的系统上面没有测试!

  2. Android为TV端助力 转载:RecyclerView分页加载

    package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...

  3. Android为TV端助力(转载)

    作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ...

  4. Android为TV端助力 不需要Socket的跨进程推送消息AIDL!

    上篇介绍了跨进程实时通讯http://www.cnblogs.com/xiaoxiaing/p/5818161.html 但是他有个缺点就是服务端无法推送消息给客户端,今天这篇文章主要说的就是服务器推 ...

  5. Android为TV端助力:(转载)修改TextView字体样式

    一.开篇 因为 Android 字体相关的内容还比较多的.有时候其实我们只需要调整一下属性就可以满足设计师的需求,或者是一个退后的方案(毕竟有发版的时间卡住了),有一些效果可以大概满足需求. 那么本文 ...

  6. Android为TV端助力:UDP协议(接收组播和单播)

    private static String MulticastHost="224.9.9.98";private static int POST=19999;private sta ...

  7. Android为TV端助力:自定义view之太阳

    先看效果图 package com.hhzt.iptv.lvb_w8.view; import android.content.Context;import android.graphics.Canv ...

  8. Android为TV端助力 Linux命令查看包名类名

    先运行apk 再输入logcat | grep START 查看当前启动apk的包名和类名 adb shell "pm list packages -f | grep com.yulong. ...

  9. Android为TV端助力 listview与recyclerview上下联动

    首先是主布局fragment里面的xml文件 <?xml version="1.0" encoding="utf-8"?><RelativeL ...

随机推荐

  1. uni-app——想说爱你不容易之踩坑系列

    1.uni-app不支持动态组件,目前在用i-if判断,或者用scroll-view切换,没有想到什么其他的办法 2.uni-app不支持具名插槽,会导致页面塌陷 3.uni-app在做动态组件渲染的 ...

  2. .net core redis 驱动推荐,为什么不使用 StackExchange.Redis

    前言 本人从事 .netcore 转型已两年有余,对 .net core 颇有好感,这一切得益于优秀的语法.框架设计. 2006年开始使用 .net 2.0,从 asp.net 到 winform 到 ...

  3. 数据结构与算法(九):AVL树详细讲解

    数据结构与算法(一):基础简介 数据结构与算法(二):基于数组的实现ArrayList源码彻底分析 数据结构与算法(三):基于链表的实现LinkedList源码彻底分析 数据结构与算法(四):基于哈希 ...

  4. Quartz.Net学习笔记

    一.概述 Quartz.NET是一个强大.开源.轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中.它灵 ...

  5. Oracle 连接查询

    1.什么是连接查询?(B) 很多时候我们需要查询的数据并不是来源于同一张表,而是来源于多张表,而这种一个查询需要对多张表进行操作,就成为连接查询. 2.如何进行表的连接查询? 连接查询有两种方式:SQ ...

  6. PoolEntry 参数讲解

    public abstract class PoolEntry<T, C> { private final String id; private final T route; //路由 p ...

  7. 学习笔记—CSS基础

    概念 CSS 指层叠样式表(Cascading Style Sheets), 是一种标记语言,属于浏览器解释型语言,可以直接由浏览器执行,不需要编译. HTML只负责网页的内容,标签尽量只负责语意不负 ...

  8. 5.App Inventor 2编程实例--指南针

    本视频来自:https://www.17coding.net 的  国庆特辑——指南针 共3个视频. 注意: 项目名字要使用英文. 项目完成后可以选择“打包APK”—“ 打包APK并下载到电脑”,然后 ...

  9. Windows Cluster 添加新节点--验证报错

    今天给既有Windows Cluster 添加节点时,验证总是不通过.报错信息为 防火墙未正确配置为故障转移群集.现将处理步骤汇总如下. 1.错误具体信息 报错的位置 --[验证警告] 的步骤中发现错 ...

  10. 《SQL CookBook 》笔记-准备工作

    目录 准备 1.建立员工表--EMP 2.建立部门表--DEPT 3.EMP表和DEPT表插入数据 4.建立透视表T1,并插入数据 5.建立透视表T10,并插入数据 第二章 shanzm 准备 1.建 ...