【GT-安卓應用開發之退出APP】
阿新 • • 發佈:2018-12-17
前言:目前在app中主流的退出應用的方式有兩種,一種是彈出提示框,另外一種則是主流的雙擊退出。今天整理了一下相關程式碼,編寫一個小demo整理了幾種退出方式。
在安卓中,監聽返回鍵有兩種方式,分別是onKeyDown與onBackPress,我定義四種實現方式如下:
方法一,onBackPress處理,雙擊退出
方法二,onKeyDown雙擊退出
方法三,onBackPress並呼叫系統提示框
方法四,onKeyDown呼叫自定義彈出框
主介面MainActivity程式碼如下:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick({R.id.btn1,R.id.btn2, R.id.btn3, R.id.btn4}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.btn1: startActivity(1); break; case R.id.btn2: startActivity(2); break; case R.id.btn3: startActivity(3); break; case R.id.btn4: startActivity(4); break; } } private void startActivity(int i) { switch (i){ case 1: Intent intent1 = new Intent(MainActivity.this,ExitActivity1.class); intent1.putExtra("text","方法一"); startActivity(intent1); finish(); break; case 2: Intent intent2 = new Intent(MainActivity.this,ExitActivity2.class); intent2.putExtra("text","方法二"); startActivity(intent2); finish(); break; case 3: Intent intent3 = new Intent(MainActivity.this,ExitActivity3.class); intent3.putExtra("text","方法三"); startActivity(intent3); finish(); break; case 4: Intent intent4 = new Intent(MainActivity.this,ExitActivity4.class); intent4.putExtra("text","方法四"); startActivity(intent4); finish(); break; } } }
四種退出方式的實現邏輯程式碼:
方法一
@Override public void onBackPressed() { long secondTime = System.currentTimeMillis(); if (secondTime - firstTime > 6200) { Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show(); firstTime = secondTime; } else { System.exit(0); } }
方法二
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { long secondTime = System.currentTimeMillis(); if (secondTime - firstTime > 6200) { Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show(); firstTime = secondTime; return true; } else { System.exit(0); } } return super.onKeyDown(keyCode, event); }
方法三
@Override public void onBackPressed() { AlertDialog.Builder builder = null; builder = new AlertDialog.Builder(this); builder.setTitle("提示"); builder.setMessage("確定退出應用?"); builder.setCancelable(true); // 將對話方塊設定為可取消 // 給按鈕添加註冊監聽 builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 點選按鈕所呼叫的方法 System.exit(0); } }); builder.setNegativeButton("取消",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 點選按鈕所呼叫的方法 } }); builder.show(); }
方法四
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { String msg = "是否確定退出應用\n否則取消"; new NotificationDialog(this,null, msg, null,new NotificationDialog.DialogCallBack() { @Override public void onResult(boolean confirmed, Bundle bundle) { if(confirmed){ System.exit(0); }else{ } } }, true).show(); } return super.onKeyDown(keyCode, event); }
PS:除了今天的主角退出APP外,程式碼中還涉及到了Activity之間利用Intent進行傳值,傳輸與接送程式碼如下:
intent1.putExtra("text","方法一");
String text = getIntent().getStringExtra("text"); tv.setText(text);
最後,專案地址