我希望我的Android應用程序的用戶在他們按下某個活動時離開我的應用程序。這可以做到嗎?使用後退按鈕離開Android應用程序
回答
你可以嘗試這樣的事情(顯示一個對話框,確認退出):
@Override
public void onBackPressed() {
new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
.setMessage("Are you sure you want to exit?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
System.exit(0);
}
}).setNegativeButton("No", null).show();
}
必須注意,因爲它是在評論低於退出應用程序與提到的是System.exit不建議。如果您的應用程序的活動收到意圖完成,則更正確的方式可能是廣播意圖。
這不會簡單地將他返回到前一個活動,如後退按鈕嗎? http://developer.android.com/reference/android/app/Activity.html#finish() –
剛剛編輯我的回答 –
使用System.exit(0);除非你知道你爲什麼必須...... –
您可以通過覆蓋後退按鈕來實現任何功能。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// Do whatever you want with your activity
// And for closing the whole app, you can use System.exit() which is absolutely not recomended
return true;
}
return super.onKeyDown(keyCode, event);
}
我不認爲它回答OP的關於如何離開應用程序的問題。 – alex
爲什麼不使用onBackPressed()? –
的一個好方法是等待第二回
private boolean _doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
Log.i(TAG, "onBackPressed--");
if (_doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this._doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Press again to quit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
_doubleBackToExitPressedOnce = false;
}
}, 2000);
}
您可以覆蓋在活動onBackPressed(),做任何你想讓它。下面是退出時被壓回的應用程序的代碼:
@Override
public void onBackPressed(){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
使用System.exit(0);在onbackpressed – ashokk
你可以試試這個
public void onBackPressed() {
moveTaskToBack(true);
}
看來你要問會打破後退按鈕和預期的目的是什麼應用程序的流程。用戶期望按下後退按鈕將其返回到前一個活動屏幕。
如果您想用後退按鈕終止整個應用程序,則每次使用startActivity()時都要調用finish()。這會在您離開時關閉當前活動,如果用戶按下後退按鈕,他們將離開您的應用程序。
有時您不想返回到上一個活動屏幕,如從主屏幕返回到登錄屏幕或返回到啓動屏幕。 –
把它放在你的清單中每一項活動:
<activity android:name=".MyActivity"
android:noHistory="true">
</activity>
開返回按從Activity
:
@Override
protected void onBackPressed() {
if (this.isFinishing()){
finish();
super.onBackPressed();
}
}
而不是覆蓋的後退按鈕行爲考慮使用FLAG_ACTIVITY_CLEAR_TOP意圖標誌來控制你的應用程序的活動堆棧。
如果已設置,並且正在啓動的活動已在當前任務中運行,則不是啓動該活動的新實例,而是關閉其上的所有其他活動,此Intent將爲作爲新的Intent提供給(現在處於頂端的)舊活動。
例如,考慮由以下活動組成的任務:A,B,C,D。如果D調用startActivity()並解析爲活動B的組件,則C和D將完成,B接收給定的Intent,導致堆棧現在爲:A,B。
使用上面的示例。這將實現這樣的事情: 從活動d:
Intent intent = new Intent(context, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
我用這個方法來離開返回按一個應用程序:
@Override
public void onBackPressed() {
enter code here
finish();
}
這不關閉應用程序。只是目前的活動 –
首先,它是完全不可思議,你想關閉你的應用程序,因爲通常情況下,如果用戶離開你的應用程序,android會處理剩下的應用程序,並根據設備的內存狀態決定是關閉還是保持暫停狀態,並且它完成了一項完美的工作,這意味着你不應該擔心關於它。
但是,如果你想關閉你的應用程序,萬一只有一個活動正在運行(在你的情況下按下按鈕時),關閉該活動將關閉整個應用程序。我的意思是,如果您使用意圖傳輸到當前活動並且沒有關閉之前的活動,那麼使用this.finish()
只會關閉當前活動並讓您回到上一次暫停的活動,否則它會關閉整個應用程序。 考慮一個事實,即活動可能使用碎片,碎片可能沒有佈局。那麼它似乎應用程序在它仍在運行時關閉。
但是如何使用硬件返回鍵來完成你的工作?你需要這樣做
@Override
public void onBackPressed()
{
if(/* check a condition to make sure you are in that certain activity */)
{
Process.killProcess(Process.myPid());
}
else
{
super.onBackPressed();
}
}
好運
我知道這是一個老帖子。但是,這對於那些想要在其應用程序中實現相同功能的人可能會有所幫助。
可以通過計算兩次後壓之間的時間來完成識別雙擊的解決方案。如果差值小於2秒(即2000毫秒),那麼你可以接受雙擊返回並退出應用程序。否則,顯示Toast消息。
簡單實現,這將是:
private static long back_pressed;
@Override
public void onBackPressed()
{
if (back_pressed + 2000 > System.currentTimeMillis())
super.onBackPressed();
else
Toast.makeText(getBaseContext(), "Press once again to exit!",Toast.LENGTH_SHORT).show();
back_pressed = System.currentTimeMillis();
}
的代碼可以在此link
@Override
public void onBackPressed(){
new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
.setMessage("Are you sure you want to exit?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}).setNegativeButton("No", null).show();
}
在這裏找到是管理backPressed()準備方法一次按兩次何時調用確認對話框:
/**
* Overrides Back Pressed Button handler.
* Single continuous press custom clear in your activity.
* Double continuous press - confirmation dialog to close all activities and exit to Android.
*/
@Override
public void onBackPressed() {
if (isBackPressedTwice) {
new AlertDialog.Builder(this)
.setCancelable(false)
.setIcon(
R.drawable.exit)
.setTitle(
getString(
R.string.exit))
.setMessage(
getString(
R.string.close_application))
.setNegativeButton(
getString(
R.string.no),
null)
.setPositiveButton(
getString(
R.string.yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
finishAffinity();
return;
}
})
.show();
} else {
// Custom activity clearing operations.
}
this.isBackPressedTwice = true;
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
isBackPressedTwice = false;
}
},
1000);
}
- 1. 應用程序後退按鈕android
- 2. 開啓Facebook應用程序後的Android後退按鈕行爲
- 3. WP7 PhoneGap應用程序後退按鈕退出應用程序
- 4. Android應用程序中的後退按鈕無法退出應用程序
- 5. 按下後退按鈕後Android應用程序無法工作
- 6. 退出應用程序第二次後退按鈕點擊 - Android
- 7. Android使用後退按鈕
- 8. 導航應用程序 - 後退按鈕
- 9. Spring MVC應用程序(後退按鈕)
- 10. 後退按鈕關閉應用程序
- 11. 退出應用程序按鈕android
- 12. android按回退按鈕應該退出應用程序
- 13. 按下後退按鈕時Android應用程序崩潰
- 14. 按下後退按鈕時的Android關閉應用程序
- 15. Android應用程序通過按「後退按鈕」退出後崩潰
- 16. javafxports 8.60.7 - 在Android上使用後退按鈕 - 無退出應用程序
- 17. Android引用應用程序,下一個和後退按鈕
- 18. 在退出應用程序之前按兩次後退按鈕
- 19. 當按下後退按鈕時退出應用程序
- 20. 退出應用程序上後退按鈕按不工作
- 21. 應用程序未打開時處理後退按鈕事件
- 22. Android應用程序在後退按鈕上崩潰(performResumeActivity)
- 23. 在webview上的Android後退按鈕殺死應用程序
- 24. 在Android應用程序中有「後退」按鈕是否合理?
- 25. 的Android後退按鈕的應用程序沒有關閉
- 26. 關閉應用程序在Android的硬件後退按鈕
- 27. Android:後退按鈕繞過onKeyDown並關閉應用程序
- 28. Android應用程序後退按鈕顯示空白屏幕
- 29. 像Android應用程序中的後退按鈕?
- 30. Android應用程序後退按鈕導致「強制關閉」
將共享的pref中的活動狀態保存爲 – KOTIOS
如果你描述你的活動流程,它會更好 – stinepike
你的意思是你想徹底退出應用程序,而不是回到寶貴的活動? –