按两次返回键,退出程序,或者按home键退出程序

前者:MainActivity:

复制代码
package com.example.zong_zhishi;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.Toast;
//按两次返回键退出程序
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    Exit exit = new Exit();  
    
    @Override  
      public boolean onKeyDown(int keyCode, KeyEvent event) {  
        if (keyCode == KeyEvent.KEYCODE_BACK) {  
                pressAgainExit();  
                return true;  
                }  
    
          return super.onKeyDown(keyCode, event);  
      }  
      
    private void pressAgainExit() {  
            if (exit.isExit()) {  
                finish();  
            } else {  
                Toast.makeText(getApplicationContext(), "再按一次退出程序",  
                        1000).show();  
                exit.doExitInOneSecond();  
            }  
        }  

}
复制代码

辅助类:

Edit.class:

复制代码
package com.example.zong_zhishi;

import android.os.Handler;  
import android.os.HandlerThread;  
  
public class Exit {  
  
    private boolean isExit = false;  
        private Runnable task = new Runnable() {  
            @Override  
            public void run() {  
                isExit = false;  
            }  
        };  
       
        public void doExitInOneSecond() {  
            isExit = true;  
            HandlerThread thread = new HandlerThread("doTask");  
            thread.start();  
            new Handler(thread.getLooper()).postDelayed(task, 1000);  
        }  
           
        public boolean isExit() {  
            return isExit;  
        }  
       
        public void setExit(boolean isExit) {  
            this.isExit = isExit;  
        }

    
    }  
复制代码

第二种方法:

复制代码
public boolean dispatchKeyEvent(KeyEvent event)    
    {    
        int keyCode=event.getKeyCode();    
        switch(keyCode)    
        {    
            case KeyEvent.KEYCODE_BACK: {    
                 if(event.isLongPress())    
                 {    
                     this.stopService(intent);    
                     System.exit(0);    
                     return true;    
                 }else    
                 {    
                     return false;    
      
                 }    
            }      
        }    
        return super.dispatchKeyEvent(event);    
            
    }
复制代码
复制代码
private long exitTime = 0; 

 

@Override 

public boolean onKeyDown(int keyCode, KeyEvent event) { 

if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ 

if((System.currentTimeMillis()-exitTime) > 2000){ 

Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); 

exitTime = System.currentTimeMillis(); 

} else { 

finish(); 

System.exit(0); 

} 

return true; 

} 

return super.onKeyDown(keyCode, event); 

}
复制代码

 

posted @   151  阅读(424)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示