phonegap 退出确认
实现 再按一次退出 ,这里只针对 主active继承 DroidGap 或者CordovaActive
以下有2种
方案1: 重写CordovaWebView类
新建类NobackWebView
package com.example.xiaoyang; import java.util.Timer;
import java.util.TimerTask; import org.apache.cordova.CordovaWebView; import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.Toast; public class NobackWebView extends CordovaWebView{
public NobackWebView(Context context) {
super(context);
}
public NobackWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NobackWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public NobackWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
super(context, attrs, defStyle, privateBrowsing);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_BACK) {
exitBy2Click();
return true;
}else{
return super.onKeyUp(keyCode, event);
}
}
public void toastMessage(String msg, int duration) {
Toast.makeText(this.getContext(), msg, duration).show();
}
private static Boolean isExit = false;
private void exitBy2Click() {
Timer tExit = null;
if (isExit == false) {
isExit = true; // 准备退出
toastMessage("再按一次退出程序", 2000);
tExit = new Timer();
tExit.schedule(new TimerTask() {
@Override
public void run() {
isExit = false; // 取消退出
}
}, 2000); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务
} else {
System.exit(0);
}
}
}
然后在主active 中init
@Override
public void init() {
//只是把源码中的CordovaWebView换成NobackWebView,其他还是源码
CordovaWebView webView = new NobackWebView(this);
CordovaWebViewClient webViewClient;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
webViewClient = new CordovaWebViewClient(this, webView);
} else {
webViewClient = new IceCreamCordovaWebViewClient(this, webView);
}
this.init(webView, webViewClient,
new CordovaChromeClient(this, webView));
}
效果: 在任意界面按退出都会 弹出"再按一次退出"的dialog
方案2
在首页 js中注册
script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/jquerymobile/1.4.2/jquery.mobile.min.js"></script>
<script type="text/javascript" src="js/cordova.js"></script>
<script type="text/javascript" src="js/cordova_plugins.js"></script> <script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
//alert("已经弄完了")
s = setInterval(function(){
//销毁启动动画
navigator.splashscreen.hide();
},2000);
//注册返回事件
document.addEventListener("backbutton",onBackKeyDown,false);
};
//BackButton按钮
function onBackKeyDown(){
if($.mobile.activePage.is('#pageone')){
navigator.notification.confirm(
'按确定退出程序!', // message
onConfirm, // callback to invoke with index of button pressed
'确定要退出程序吗?', // title
'确定,取消' // buttonLabels
);
}
else {
navigator.app.backHistory();
}
}
function onConfirm(button) {
//alert('You selected button ' + button);
if(button==1) navigator.app.exitApp(); //选择了确定才执行退出 } </script>
效果:以弹出框的形式,并且只在首页时,按退出时进行提示,其它页面只是返回上一页
phonegap 退出确认的更多相关文章
- phonegap退出android程序
最近用android做了一个程序,在点“后退”的时候,会不停地后退,感觉不好. 查了些资料有这么些: 一.toast_plugin插件 <script type="text/javas ...
- Android:实现退出确认对话框
在Android平台上捕获Back键的事件,super.onBackPressed()是执行系统的默认动作,就是退出当前activity,我们要做的就是重写onBackPressed()函数, pub ...
- Android实现“退出确认”对话框
@Override public void onBackPressed() { new AlertDialog.Builder(this).setTitle("确认退出吗?") . ...
- VB.Net中确认退出对话框的实现
实现方法分为两大类:窗体事件和控件事件,下面就一一展示: 一.FormClosing事件(又分以下几种方法) a. Private Sub frmPractise_FormClosing(ByVal ...
- (转)Phonegap VS AppCan
简介 Phonegap PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够利用iPhone,Android,Palm,Sym ...
- 混合应用开发:Phonegap VS AppCan
混合应用开发:Phonegap VS AppCan 简介 Phonegap PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能 ...
- 详解:基于WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器功能
文件同步传输工具比较多,传输的方式也比较多,比如:FTP.共享.HTTP等,我这里要讲的就是基于HTTP协议的WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器这样的一个工具(简称:一 ...
- cocos2d-x Android版游戏之中国移动SDK嵌入
. 拷贝API 将SDK\runtime\CMBilling20007.jar拷贝至游戏工程的runtime目录下(或其他目录) ,但切记不能放在libs目录下编译,否则编译报错(如:bad rang ...
- Android:AlertDialog对话框
1.简单的ALertDialog: Dialog alertDialog = new AlertDialog.Builder(this) .setTitle("标题") .setM ...
随机推荐
- lintcode:寻找旋转排序数组中的最小值 II
寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在重复的元 ...
- 打印TMemo的内容到打印机
Canvas.TextOut真是好用,Printer也实在好用: procedure PrintTStrings(Lst : TStrings) ; var I, Line : Integer; be ...
- http://www.ruanyifeng.com/blog/2007/03/metadata.html
http://www.ruanyifeng.com/blog/2007/03/metadata.html
- Redis的List操作
lpush key value 作用: 把值插入到链接头部 127.0.0.1:6379> lpush character a (integer) 1 127.0.0.1:6379> rp ...
- Java:异常的处理
异常分两种大的异常类型,运行时异常和受检查异常. 用户既可以使用系统的异常类来处理异常信息,也可以创建系统的异常类的子类来自定义异常,这种方式比较灵活,虚拟机可以报出自己设置的异常信息,清楚明白. 1 ...
- iOS:核心动画之动画组CAAnimationGroup
CAAnimationGroup——动画组 动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行 属性说明: ...
- Intellij IDEA的Hibernate简单应用
1.创建数据库及其表 create database demo; use demo; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL ...
- Iterator的remove方法可保证从源集合中安全地删除对象(转)
如果对正在被迭代的集合进行结构上的改变(即对该集合使用add.remove或clear方法),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModificationExcept ...
- Servlet如何实现修改后不重启服务器而生效
只需在apache-tomcat-8.0.0-RC10\conf\servlet.xml中修改相关设置: 在<Host name="localhost" appBase ...
- JAVA多线程下载网络文件
JAVA多线程下载网络文件,开启多个线程,同时下载网络文件. 源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...