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 ...
随机推荐
- Python时间模块。
python中时间的表示方式 unix时间戳,字符串时间,格式化时间 时间模块有,time,datetime,calendar #time模块 import time #获取本地时间戳,返回浮点数 p ...
- ArcGIS 10.2 JavaScript API本地部署离线开发环境
1 获取ArcGIS JavaScript API API的下载地址http://support.esrichina.com.cn/2011/0223/960.html,在下载页面会看到api和sdk ...
- 用户体验报告(Echo)
班级:软件工程1916|W 作业:项目Beta冲刺(团队) 团队名称:Echo 团队博客汇总 队员学号 队员姓名 个人博客地址 备注 221600136 张至锋 https://www.cnblogs ...
- 20180418模拟赛T2——Gym
Gym (Gym.cpp/c/pas) 题目描述 Description 木吉终于到达了 VAN 様的老巢 gym,然而他已经是孤身一人.他决定和 VAN 様来一场对决.他决定和 VAN 様玩♂跑♂步 ...
- c+多态的本质:编译器维护了类型信息同时插入了解释执行机制
Calling a virtual function is slower than calling a non-virtual function for a couple of reasons: Fi ...
- Maven整合SSH框架的所有依赖和插件(记录下来,省的以后再写)
JDK:1.8 Tomcat:7 Maven:3.6.1 调了一个小时,终于没错误了,总结了一个规律,如果在用Tomcat插件启动项目时报错,显示如:org.apache.tomcat.util.bc ...
- CF732D Exams 题解
CF732D Exams 题目描述 Vasiliy has an exam period which will continue for \(n\) days. He has to pass exam ...
- 【JZOJ6231】【20190625】等你哈苏德
题目 有\(m\)条线段,每条线段为\([l_i,r_i]\),每条线段可以是黑/白色 有些线段已经被染色,有些需要被确定颜色 询问是否存在一种染色方案,使得对于每一个位置\(i\),覆盖它的线段黑白 ...
- 洛谷1169 [ZJOI2007] 棋盘制作
题目链接 题意概述:给出由0 1构成的矩阵,求没有0 1 相邻的最大子矩阵的最大子正方形. 解题思路:设f[i][j]表示i j向上能到哪,l[i][j] r[i][j]表示向左/右,转移时分开计算矩 ...
- Xilinx ISE中使用Synplify综合报错的原因之二
今天发现,不同的器件型号下由IP core生成的模块有时不通用,在实现(implementation)时会出现translate错误.