JS调用onBackPressed
需求:
安卓页面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的更多相关文章
- [转]JS调用Android里面的方法,Android调用JS里面的方法
FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- 如何通过JS调用某段SQL语句
如何通过JS调用某段SQL语句,这样的需求在报表.数据平台开发中很常见.以报表平台FineReport开发为例,例如在点击某个按钮之后,来判断一下数据库条数,再决定下一步操作.那这在后台如何实现呢? ...
- iOS开发--JS调用原生OC篇
JS调用原生OC篇 方式一(反正我不用) 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理. 我写了一个简单的HTML网页和一个btn点击 ...
- 通过js调用android原生方法
有时候我们有这样一个需求,监听html中控件的一些事件.例如点击html中某个按钮,跳转到别的activity,复制某段文本. 首先是对webview的设置: myWebView = (WebView ...
- js调用php和php调用js的方法举例
js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...
- android webView开发之js调用java代码示例
1.webView设置 webView.getSettings().setJavaScriptEnabled(true);//设置支持js webView.addJavascriptInterface ...
- c#JS调用
using MSScriptControl; using System; using System.Collections.Generic; using System.Reflection; usin ...
- Android 使用js调用Java
效果如: 主要用到一个接口类:MyObject package com.example.jsdemo; import android.content.Context; import android.s ...
随机推荐
- The 2019 Asia Yinchuan First Round Online Programming F. Moving On
t题目链接:https://nanti.jisuanke.com/t/41290 思路:题目意思很容易想到floyd,但是由于危险度的限制,我们该怎么跑floyd呢. 一开始理解错题目了,以为u-&g ...
- test20191205 WC模拟赛
又是先开T3的做题顺序,搞我心态.以后我必须先看看题了. 整数拆分 定义 \(f_m(n)\) 表示将 \(n\) 表示为若干 \(m\) 的非负整数次幂的和的方案数.例如,当 \(m = 2\) 的 ...
- 25、typing导入Python的数据类型模块、collections集合模块
一.typing模块 1.typing模块的作用 类型检查,防止运行时出现参数和返回值类型不符合. 作为开发文档附加说明,方便使用者调用时传入和返回参数类型. 该模块加入后并不会影响程序的运行,不会报 ...
- 实时查看mysql当前连接数
如何实时查看mysql当前连接数? 1.查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist 2.只查看当前连接数(Thread ...
- jdk是什么
jdk是对java基础环境和相应开发平台标准和工具包的封装(zip) 开发平台 j2se j2ee j2me; 基础环境: 虚拟机.运行环境 JDK是整个JAVA的核心,包括了Java运行环境JRE( ...
- /bin/bash^M: bad interpreter
(1)使用linux命令dos2unix filename,直接把文件转换为unix格式: (2)使用sed命令sed -i "s/\r//" filename 或者 sed -i ...
- 常用方法 DataTable转换为Entitys
备注:摘自网上 有附地址 public static List<T> DataTableToEntities<T>(this DataTable dt) where T : c ...
- A#G/C013
A#G/C013 A Sorted Arrays 不会/kk B Hamiltonish Path 我是傻逼 如果一条路径不合法,那么把不合法的端点向没出现过的相邻点连过去救星了 C Ants on ...
- Shell字符串截取(非常详细)
假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 1 echo ${var#*//} 其中 var 是变量名,# 号是运算符, ...
- 【Beta】Scrum meeting 3
目录 写在前面 进度情况 任务进度表 Beta-1阶段燃尽图 遇到的困难 照片 commit记录截图 小程序前端仓库 技术博客 写在前面 例会时间:5.7 22:30-23:00 例会地点:微信群语音 ...