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 ...
随机推荐
- Flask-Script Manager
Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...
- 初识Java(Java数字处理类-大数字运算)
一.大数字运算 在 Java 中提供了大数字的操作类,即 java.math.BigInteger 类与 java.math.BigDecimal 类.这两个类用于高精度计算,体重 BigInteg ...
- 《团队名称》第八次团队作业:Alpha冲刺day3
项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8-软件测试与ALPHA冲刺 团队名称 快活帮 作业学习目标 (1)掌握 ...
- Gym - 247731E :room(最小费用流裸题)
题意:有N个宿舍(N<200),给出第一年每个宿舍有哪4个同学.现在给出N个4元组y[][4],表示这4个人想住一起,问最少多少人需要换宿舍. 思路:费用流,每个4元组y[]到每个宿舍连边,流量 ...
- http 和 https(通俗原理了解)
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...
- 数据分析 - pandas
简介 pandas是一个强大的Python数据分析的工具包,它是基于Numpy构建的,正因pandas的出现,让Python语言也成为使用最广泛而且强大的数据分析环境之一. Pandas的主要功能: ...
- Ice Igloos Gym - 101480I (暴力技巧)
Problem I: Ice Igloos \[ Time Limit: 10 s \quad Memory Limit: 512 MiB \] 题意 给出\(n\)个圆,给出每个圆的坐标\(x\). ...
- 拓展-教你手把手用纯CSS写轮播图
先看成品图[示例网址:][1] [1]: https://huruji.github.io/css-imitate-js/slider/index.html一.随便说几句####css3动画效果的强大 ...
- Xamarin.Forms之XAML
官网参考 XAML基础知识 XAML(eXtensible Application Markup Language)可扩展应用程序标记语言,允许开发者在Xamarin.Forms应用中采用标记而不是代 ...
- 51: Luogu 2485 模板
$des$ 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最小非负整数x: 3.给定y.z.p,计算满足y^x ≡z(mod p)的最小非负 ...