需求:

安卓页面webview加载H5页面,H5页面能能返回到安卓页面

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; import com.outfit7.talkingfriends.gui.view.wardrobe.R;
import com.outfit7.talkingfriends.gui.view.wardrobe.utils.TelecomUrl; public class TelecomActivity extends AppCompatActivity { /**
* 自定义的,当js调用history.go时加载的链接,以监听history.go方法的调用
*/
private final static String ON_BACK_PRESSED = "onBackPressed";
private static final String RETURN_FLAG = "ShijilongBack"; private ImageView telecomBack;
private ImageView phoneClear;
private EditText phoneNumber;
private TextView telecomNext;
private LinearLayout inputLayout;
private String phone;
private boolean payState = false;
private WebView webView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_telecom);
telecomBack = findViewById(R.id.telecomBack);
phoneClear = findViewById(R.id.phoneClear);
phoneNumber = findViewById(R.id.phoneNumber);
telecomNext = findViewById(R.id.telecomNext);
inputLayout = findViewById(R.id.inputLayout); //监听输入
phoneNumber.addTextChangedListener(new TextWatcher() {
private CharSequence temp; @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
temp = s;
} @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override
public void afterTextChanged(Editable s) {
if (temp.length() == 0) {
phoneClear.setVisibility(View.INVISIBLE);
telecomNext.setEnabled(false);
} else if (temp.length() > 0 && temp.length() < 11) {
phoneClear.setVisibility(View.VISIBLE);
telecomNext.setEnabled(false);
} else if (temp.length() == 11) {
phoneClear.setVisibility(View.VISIBLE);
telecomNext.setEnabled(true);
}
}
}); //清空输入
phoneClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
phoneNumber.setText("");
phoneClear.setVisibility(View.INVISIBLE);
telecomNext.setEnabled(false);
}
}); //返回
telecomBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
//跳转
telecomNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideSoftKeyboard();
phone = phoneNumber.getText().toString();
inputLayout.setVisibility(View.GONE);
loadWebView();
}
});
} /**
* 加载支付页面
*/
private void loadWebView() {
webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
pageFinished();
super.onPageFinished(view, url);
} @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("wanglei", "url=" + url);
overrideUrlLoading(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
webView.loadUrl(TelecomUrl.assembleUrl(phone));
setContentView(webView);
} /**
* 重写js页面window.history.go方法
*/
public void pageFinished() {
String script = "javascript:(function(){window.history.go = function(){window.location.href='" + ON_BACK_PRESSED + "';}})()";
webView.loadUrl(script);
} /**
* 拦截url加载
*/
public void overrideUrlLoading(String url) {
if (url.contains(ON_BACK_PRESSED)) {//拦截返回和取消按钮http://cemp.189.cn:8080/pay/web/onBackPressed
onBackPressed();
} else if (url.contains(RETURN_FLAG)) {//拦截支付返回结果,成功和失败都会包含ShijilongBack
int beginIndex = url.indexOf("code=") + 5;
String code = url.substring(beginIndex, beginIndex + 1);
Log.i("wanglei", "code=" + code);
if (!TextUtils.isEmpty(code)) {
payState = ("0".equals(code) ? true : false);
onBackPressed();
}
}
} /**
* 隐藏软键盘
*/
private void hideSoftKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
} @Override
public void onBackPressed() {
//测试支付成功
if (payState) {
setResult(RESULT_OK);
}
super.onBackPressed();
}
}

代码中有些业务逻辑,可以自行删除

JS调用onBackPressed的更多相关文章

  1. [转]JS调用Android里面的方法,Android调用JS里面的方法

    FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...

  2. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  3. 如何通过JS调用某段SQL语句

    如何通过JS调用某段SQL语句,这样的需求在报表.数据平台开发中很常见.以报表平台FineReport开发为例,例如在点击某个按钮之后,来判断一下数据库条数,再决定下一步操作.那这在后台如何实现呢? ...

  4. iOS开发--JS调用原生OC篇

    JS调用原生OC篇 方式一(反正我不用) 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理. 我写了一个简单的HTML网页和一个btn点击 ...

  5. 通过js调用android原生方法

    有时候我们有这样一个需求,监听html中控件的一些事件.例如点击html中某个按钮,跳转到别的activity,复制某段文本. 首先是对webview的设置: myWebView = (WebView ...

  6. js调用php和php调用js的方法举例

    js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...

  7. android webView开发之js调用java代码示例

    1.webView设置 webView.getSettings().setJavaScriptEnabled(true);//设置支持js webView.addJavascriptInterface ...

  8. c#JS调用

    using MSScriptControl; using System; using System.Collections.Generic; using System.Reflection; usin ...

  9. Android 使用js调用Java

    效果如: 主要用到一个接口类:MyObject package com.example.jsdemo; import android.content.Context; import android.s ...

随机推荐

  1. 排序算法合集(C++实现)

    摘要 排序操作在程序设计中是非常基础和常见的,也是算法的基础部分,我对几种常见的比较排序算法进行了整理. 暴力排序(violence sort) 思想:遍历数组,每次遍历都在未排序的部分找到最小元素的 ...

  2. 爬取前程无忧网站上python的招聘信息。

    本文获取的字段有为职位名称,公司名称,公司地点,薪资,发布时间 创建爬虫项目 scrapy startproject qianchengwuyou cd qianchengwuyou scrapy g ...

  3. Java 中函数式编程方法形参为基本类型和引用类型

    简单复习下 基本数据类型值传递 值传递,原变量的值不会被修改 private final Consumer sout = System.out::println; @Before public voi ...

  4. httprunner学习7-extract提取content返回对象

    前言 提取response返回的对象数据,用extract关键字.前面有关于token的取值,通过content.token取值. 本篇详细讲解如何从返回的json数据提取出想要的各种数据 conte ...

  5. Linux内核Socket实现之------Socket创建(2) 文件描述符

    转载请注明:http://blog.chinaunix.net/uid-20788636-id-4408276.html 1.2 sock_map_fd函数 在用户空间创建了一个socket后,返回值 ...

  6. mybatis include refid="Base_Column_List"含义

    <sql id="Base_Column_List" > collegeID, collegeName </sql> <select id=" ...

  7. Servlet & spring -网络事务处理单元

    网络事务处理单元 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 ...

  8. RabbitMQ简单介绍+Windows环境安装

    文章目录 1.RabbitMQ简介2.RabbitMQ与其他MQ有什么不同3.RabbitMQ环境安装3.1 安装erlang3.2 安装rabbitmq-server4. RabbitMQ管理平台介 ...

  9. 基本例程(4-1)手势识别C++ 和简单形状匹配

    扩展库https://blog.csdn.net/Taily_Duan/article/details/52130135 opencv3.3+扩展库 /************************ ...

  10. luoguP4112 [HEOI2015]最短不公共子串 SAM,序列自动机,广搜BFS

    luoguP4112 [HEOI2015]最短不公共子串 链接 luogu loj 思路 子串可以用后缀自动机,子序列可以用序列自动机. 序列自动机是啥,就是能访问到所有子序列的自动机. 每个点记录下 ...