사용자가 종료하고 싶으면 다시 누르라는 메시지를 표시하는 코드를 작성했습니다. 나는 현재 내 코드가 어느 정도 작동하고 있지만 제대로 작성되지 않았 음을 알고 있으며 더 나은 방법이 있다고 가정합니다. 어떤 제안이라도 도움이 될 것입니다!
암호:
public void onBackPressed(){
    backpress = (backpress + 1);
    Toast.makeText(getApplicationContext(), " Press Back again to Exit ", Toast.LENGTH_SHORT).show();
    if (backpress>1) {
        this.finish();
    }
}
답변
사용자에게 종료를 원하는지 묻는 대화 상자를 구현 한 다음 종료 super.onBackPressed()하면 호출 합니다.
@Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
        .setTitle("Really Exit?")
        .setMessage("Are you sure you want to exit?")
        .setNegativeButton(android.R.string.no, null)
        .setPositiveButton(android.R.string.yes, new OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                WelcomeActivity.super.onBackPressed();
            }
        }).create().show();
}
위의 예에서 WelcomeActivity를 활동 이름으로 바꿔야합니다.
답변
백 프레스에는 카운터가 필요하지 않습니다.
표시된 토스트에 대한 참조를 저장하십시오.
private Toast backtoast;
그때,
public void onBackPressed() {
    if(USER_IS_GOING_TO_EXIT) {
        if(backtoast!=null&&backtoast.getView().getWindowToken()!=null) {
            finish();
        } else {
            backtoast = Toast.makeText(this, "Press back to exit", Toast.LENGTH_SHORT);
            backtoast.show();
        }
    } else {
        //other stuff...
        super.onBackPressed();
    }
}
finish()토스트가 계속 표시되는 동안 뒤로를 누르면 호출 되며, 뒤로 누르면 응용 프로그램이 종료되는 경우에만 호출 됩니다.
답변
이보다 훨씬 간단한 접근 방식을 사용합니다.
public class XYZ extends Activity {
    private long backPressedTime = 0;    // used by onBackPressed()
    @Override
    public void onBackPressed() {        // to prevent irritating accidental logouts
        long t = System.currentTimeMillis();
        if (t - backPressedTime > 2000) {    // 2 secs
            backPressedTime = t;
            Toast.makeText(this, "Press back again to logout",
                                Toast.LENGTH_SHORT).show();
        } else {    // this guy is serious
            // clean up
            super.onBackPressed();       // bye
        }
    }
}
답변
당신의 방식과 @Steve의 방식 모두 우발적 인 종료를 방지하는 허용 가능한 방법입니다.
구현을 계속하기로 선택하는 경우 백 프레스가 0으로 초기화되었는지 확인 Timer하고 쿨 다운 기간 후에 키를 누를 때 0으로 재설정하는 일종의를 구현해야합니다 . (~ 5 초가 맞는 것 같습니다)
답변
또한 onPause사용자가 처음으로 뒤로 누른 후 집을 누르거나 다른 방법으로 다른 방법으로 이동하는 경우를 방지하기 위해 카운터를 재설정해야 할 수도 있습니다 . 그렇지 않으면 문제가 발생하지 않습니다.
답변
첫 번째 활동으로 이동하지 않고 직접 두 번째 활동에서 애플리케이션을 종료하려면이 코드를 시도하십시오 .`
두 번째 활동에이 코드를 넣으십시오 ..
 @Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
            .setTitle("Really Exit?")
            .setMessage("Are you sure you want to exit?")
            .setNegativeButton(android.R.string.no, null)
            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    setResult(RESULT_OK, new Intent().putExtra("EXIT", true));
                    finish();
                }
            }).create().show();
}
그리고 당신의 첫 번째 활동이 코드를 넣으십시오 …..
public class FirstActivity extends AppCompatActivity {
Button next;
private final static int EXIT_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    next = (Button) findViewById(R.id.next);
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivityForResult(new Intent(FirstActivity.this, SecondActivity.class), EXIT_CODE);
        }
    });
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == EXIT_CODE) {
        if (resultCode == RESULT_OK) {
            if (data.getBooleanExtra("EXIT", true)) {
                finish();
            }
        }
    }
}
}
답변
사용자가 2 초 이상 돌아 오지 않으면 backpressed 값을 재설정하기 때문에 이것이 가장 좋은 방법입니다.
하나의 전역 변수를 선언하십시오.
 private boolean backPressToExit = false;
재정의
onBackPressed방법.
@Override
public void onBackPressed() {
    if (backPressToExit) {
        super.onBackPressed();
        return;
    }
    this.backPressToExit = true;
    Snackbar.make(findViewById(R.id.yourview), getString(R.string.exit_msg), Snackbar.LENGTH_SHORT).show();
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            backPressToExit = false;
        }
    }, 2000);
}
