实现 再按一次退出  ,这里只针对 主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 退出确认的更多相关文章

  1. phonegap退出android程序

    最近用android做了一个程序,在点“后退”的时候,会不停地后退,感觉不好. 查了些资料有这么些: 一.toast_plugin插件 <script type="text/javas ...

  2. Android:实现退出确认对话框

    在Android平台上捕获Back键的事件,super.onBackPressed()是执行系统的默认动作,就是退出当前activity,我们要做的就是重写onBackPressed()函数, pub ...

  3. Android实现“退出确认”对话框

    @Override public void onBackPressed() { new AlertDialog.Builder(this).setTitle("确认退出吗?") . ...

  4. VB.Net中确认退出对话框的实现

    实现方法分为两大类:窗体事件和控件事件,下面就一一展示: 一.FormClosing事件(又分以下几种方法) a. Private Sub frmPractise_FormClosing(ByVal ...

  5. (转)Phonegap VS AppCan

    简介 Phonegap PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够利用iPhone,Android,Palm,Sym ...

  6. 混合应用开发:Phonegap VS AppCan

    混合应用开发:Phonegap VS AppCan 简介 Phonegap PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能 ...

  7. 详解:基于WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器功能

    文件同步传输工具比较多,传输的方式也比较多,比如:FTP.共享.HTTP等,我这里要讲的就是基于HTTP协议的WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器这样的一个工具(简称:一 ...

  8. cocos2d-x Android版游戏之中国移动SDK嵌入

    . 拷贝API 将SDK\runtime\CMBilling20007.jar拷贝至游戏工程的runtime目录下(或其他目录) ,但切记不能放在libs目录下编译,否则编译报错(如:bad rang ...

  9. Android:AlertDialog对话框

    1.简单的ALertDialog: Dialog alertDialog = new AlertDialog.Builder(this) .setTitle("标题") .setM ...

随机推荐

  1. POJ 3114 Countries in War(强联通分量+Tarjan)

    题目链接 题意 : 给你两个城市让你求最短距离,如果两个城市位于同一强连通分量中那距离为0. 思路 :强连通分量缩点之后,求最短路.以前写过,总感觉记忆不深,这次自己敲完再写了一遍. #include ...

  2. 如何使用SPY++查找

    自动化测试中,如果需要做UI automation的时候往往需要抓取object的工具.实际上这种工具有很多,认识的大牛使用SPY++,于是我也选择了这个.下面列出基本使用方法.有点像XACC spy ...

  3. 本博客不再更新,欢迎访问本人托管在GitHub上的博客:www.wshunli.com

    本博客不再更新. 欢迎访问本人托管在GitHub上的博客:www.wshunli.com

  4. wait、waitpid 僵尸进程 孤儿进程

    man wait: NAME wait, waitpid, waitid - wait for process to change state SYNOPSIS #include <sys/ty ...

  5. AE开发 入门教程

    此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <安装目录>/DeveloperK ...

  6. [原]poj2243-Knight Moves-水bfs

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> using ...

  7. AOJ - 0009 Prime Number (素数筛法) && AOJ - 0005 (求最大公约数和最小公倍数)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34870 求n内的素数个数. /* ********************* ...

  8. sqlserver取得本月一号

    select convert(datetime,convert(varchar(7),getdate(),120)+'-01',120) select convert(datetime,convert ...

  9. Oracle中用一个表的数据更新另一个表的数据

    update tbl1 a   set (a.col1, a.col2) = (select b.col1, b.col2                              from tbl2 ...

  10. Asp.net MVC 3实例学习之ExtShop(四)——完成产品列表页

    在完成产品列表页前要做一些准备功夫.首先是去下载MvcPager用了为产品列表分页.下载的可能是基于MVC 2的,没关系,可以用在MVC 3上.如果有担心,下载源代码重新编译一次好了.下载后将DLL添 ...