Android - "뒤로" 버튼을 무시하여 활동이 종료되지 않도록 하는 방법은 무엇입니까?
현재 알림이 표시될 때 알림 표시줄에도 알림이 표시되는 활동이 있습니다.
이것은 사용자가 홈을 누르고 활동을 백그라운드로 밀면 알림을 통해 활동으로 돌아갈 수 있도록 하기 위한 것입니다.
문제는 사용자가 뒤로 단추를 누르면 내 활동이 삭제되지만 사용자가 뒤로 누를 수 있지만 알림을 통해 활동에 액세스할 수 있기를 원하는 경우 알림은 그대로 유지됩니다.그러나 사용자가 이 작업을 시도하면 이전 작업을 되돌리는 대신 새 작업을 시작하려고 시도하는 Null Pointers가 표시됩니다.
따라서 기본적으로 뒤로 버튼이 홈 버튼과 동일하게 작동하기를 원하며 지금까지 시도한 방법은 다음과 같습니다.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
그러나 위의 코드는 여전히 활동을 삭제할 수 있는 것 같습니다. 뒤로 버튼을 눌렀을 때 활동이 삭제되지 않도록 하려면 어떻게 해야 합니까?
키 수신기 제거 또는 반환true
있을 때KEY_BACK
.
백 키를 잡으려면 다음이 필요합니다(슈퍼인을 부르지 않도록 하십시오).onBackPressed()
).
또한 백그라운드에서 서비스를 실행할 계획이라면 다음을 확인하십시오.startForeground()
계속해서 알림을 받지 않으면 Android가 메모리를 확보해야 할 경우 서비스를 종료합니다.
@Override
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
}
코드 한 줄만으로 구현하는 것이 더 쉬웠습니다.
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
간단히 이것을 하라.
@Override
public void onBackPressed() {
//super.onBackPressed();
}
//super.onBackPressed()를 주석 처리합니다.
제 생각에 당신이 원하는 것은 뒤로 단추를 덮어쓰는 것이 아니라(Android OS가 해당 동작을 정의하는데 왜 변경하는 것입니까?) 활동 수명 주기를 사용하고 설정/데이터를 onSaveInstanceState(Bundle) 이벤트에서 유지하는 것입니다.
@Override
onSaveInstanceState(Bundle frozenState) {
frozenState.putSerializable("object_key",
someSerializableClassYouWantToPersist);
// etc. until you have everything important stored in the bundle
}
그런 다음 onCreate(Bundle)를 사용하여 해당 지속 번들에서 모든 항목을 가져오고 상태를 다시 만듭니다.
@Override
onCreate(Bundle savedInstanceState) {
if(savedInstanceState!=null){ //It could be null if starting the app.
mCustomObject = savedInstanceState.getSerializable("object_key");
}
// etc. until you have reloaded everything you stored
}
위의 psuedo-code를 고려하여 올바른 방향을 가리킵니다.활동 라이프사이클을 자세히 읽어보면 원하는 것을 달성할 수 있는 최선의 방법을 결정하는 데 도움이 될 것입니다.
사용해 보십시오.
@Override
public void onBackPressed() {
finish();
}
뒤로 단추(전화기 하단)와 홈 단추(액션 모음 왼쪽)의 동작을 처리하려는 경우에 대비하여 제가 프로젝트에서 사용하는 이 사용자 지정 활동이 도움이 될 수 있습니다.
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
/**
* Activity where the home action bar button behaves like back by default
*/
public class BackActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupHomeButton();
}
private void setupHomeButton() {
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onMenuHomePressed();
return true;
}
return super.onOptionsItemSelected(item);
}
protected void onMenuHomePressed() {
onBackPressed();
}
}
활동에 사용되는 예:
public class SomeActivity extends BackActivity {
// ....
@Override
public void onBackPressed()
{
// Example of logic
if ( yourConditionToOverride ) {
// ... do your logic ...
} else {
super.onBackPressed();
}
}
}
@Override
public void onBackPressed() {
// Put your code here.
}
//I had to go back to the dashboard. Hence,
@Override
public void onBackPressed() {
Intent intent = new Intent(this,Dashboard.class);
startActivity(intent);
}
Just write this above or below the onCreate Method(within the class)
코틀린에서:
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
// Handle the back button event
}
자세한 내용은 이 항목을 참조하십시오.
코틀린의 뒤로 단추를 덮어쓰는 것에 대한 구체적인 질문도 있습니다.
매우 늦은 감이 있지만 새 화면으로 전환하고 뒤로 버튼 스택을 지워야 하는 분들에게는 매우 간단한 해결책입니다.
startActivity(new Intent(this,your-new-screen.class));
finishAffinity();
finishAffinity(); 메서드는 뒤로 버튼 스택을 지웁니다.
그냥 이렇게 해요.
@Override
public void onBackPressed() {
super.onBackPressed();
}
언급URL : https://stackoverflow.com/questions/3141996/android-how-to-override-the-back-button-so-it-doesnt-finish-my-activity
'programing' 카테고리의 다른 글
Android에서 네트워크 연결 유형 검색 (0) | 2023.09.01 |
---|---|
모바일 레이아웃에서 부트스트랩 3 열 순서를 변경하려면 어떻게 해야 합니까? (0) | 2023.09.01 |
jQuery에서 양식 변경을 어떻게 처리합니까? (0) | 2023.09.01 |
PDO MariaDB 단순 선택 (0) | 2023.09.01 |
ASP에서 SecureString을 사용하면 어떤 이점이 있습니까?NET? (0) | 2023.09.01 |