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. 关于.net导出数据到excel/word【占位符替换】

    1]excel的占位符替换 效果如图 关键代码: ///savedFilePath需要保存的路径 templateDocPath模板路径 替换的关键字和值 格式 [姓名]$%$小王 public st ...

  2. ifrem上传文件后显示

    ifrem上传文件后显示 1.上传文件按钮    <a class="btn btn-primary pull-right" id="data-upload&quo ...

  3. SmartSql Redis 分布式缓存

    安装 SmartSql.Cache.Redis Install-Package SmartSql.Cache.Redis Cache 配置 <Cache Id="T_Test.Redi ...

  4. ArcGIS对SLD样式的支持

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.ArcGISWMS服务对SLD的支持 在完成用geoserver的w ...

  5. 衡量GDP,哪种夜间灯光数据更靠谱?

    <新科学家>杂志报道,随着经济发展,一些国家通常会新修道路,扩展居民区,这两项措施都会使从太空中看到的灯光强度增加.不少学者利用夜间灯光数据与国内生产总值统计数据进行比较,发现从太空中看到 ...

  6. Api管家系列(一):初探

    前段时间发现一个很好用的API管理工具--API管家,用了一段时间,已经感觉离不开了,抱着分享使我快乐的想法,因为刚开始用的时候随便写过一篇简介,不是很详细,所以现在就重新写,把我这段时间使用的经验和 ...

  7. Cmake 学习笔记

    编写CMakeLists.txt   #在当前目录新建一个build目录,然后cd build:cmake .. #这样的好处是,可以将cmake生成的内容,和源码文件分离   #设置编译结果发布路径 ...

  8. c语言总练习题

    !4,42 ?45 1 Description 键盘输入一个双精度数据,乘以2以后输出 Input 输入一个double型数据 Output 输出它的两倍数,结果保留8位小数 Sample Input ...

  9. 2018~试试idea~

    无聊~随便写了一个 输入控制台,发现点击run之后,反应要比eclipse慢一些,不知道是什么原因!!! 略略的操作了一下,还是和eclipse的使用习惯有很大的差异~

  10. idapython import 'site' failed

    打开IDA出现这个错误提示,问题根源是IDA找不到python,安装2.7版本的python并设置%PYTHONHOME%变量为python安装目录就可以了 如果已经安装了python可以在命令行下用 ...