홈 버튼처럼 작동하도록 뒤로 버튼 재정의
뒤로 버튼을 눌렀을 때 앱이 파괴 상태가 아닌 정지 상태로 되어 있으면 좋겠습니다.
Android 문서에는 다음과 같이 기술되어 있습니다.
모든 액티비티가 BACK를 눌렀을 때 파괴되는 동작을 하는 것은 아닙니다.사용자가 음악 응용 프로그램에서 음악 재생을 시작한 후 뒤로 누르면 프로그램이 일반적인 뒤로 동작을 재정의하여 플레이어 액티비티가 파괴되지 않도록 하고 액티비티가 표시되지 않아도 음악 재생을 계속합니다.
이 기능을 자신의 애플리케이션에서 복제하려면 어떻게 해야 합니까?
세 가지 가능성이 있을 것 같은데...
(아래와 같이) 뒤로 버튼을 누른 후 홈버튼이 호출하는 모든 메서드를 호출합니다.
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); }
뒤로 버튼을 누르고 홈 버튼을 스푸핑합니다.
뒤로 버튼을 누른 다음 홈 화면의 작업을 시작하여 응용 프로그램의 활동을 사실상 중지 상태로 만듭니다.
편집: 서비스에 대해 알고 있으며 이 문제와 관련된 응용 프로그램에서 서비스를 사용하고 있습니다.이 질문은 특히 뒤로 버튼을 눌렀을 때 액티비티를 파기 상태가 아닌 정지 상태로 하는 것에 관한 것입니다.
대부분의 경우 백그라운드에서 작업을 수행하기 위해 서비스를 생성해야 하며 이러한 작업은Activity
이 일을 통제하다Service
(Music Player도 같은 방법으로 동작하기 때문에 문서의 예는 약간 오해를 불러일으킬 수 있습니다.)경우라면, 의 약면면면, 당당 if if if if if if.Activity
수 있다finish
때처럼Service
는 계속 실행됩니다.
더 방법은 '', '찍다', '찍다'입니다.Back
버튼을 누르고 다음과 같이 moveTaskToBack(true)을 호출합니다.
// 2.0 and above
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
액티비티가 정상적으로 종료되어 필요에 따라 서비스에서 현재 상태를 읽을 수 있도록 하는 것이 바람직하다고 생각합니다. ★★★★★★★★★★★★★★★★★.moveTaskToBack
경우에 따라 빠른 대안으로 사용할 수 있습니다.
참고: 아래 Dave가 지적한 바와 같이 Android 2.0은 새로운 기능을 도입했습니다.onBackPressed
방법 및 뒤로 버튼을 처리하는 방법에 대한 권장 사항을 참조하십시오.
다음 코드를 사용합니다.
public void onBackPressed() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
뒤로 버튼을 누르고 싶다면 Android Developer Blog의 이 게시물을 보십시오.Android 2.0에서 이를 수행하는 더 쉬운 방법과 1.x 및 2.0에서 실행되는 응용 프로그램에서 이를 수행하는 가장 좋은 방법에 대해 설명합니다.
그러나 액티비티가 Stopped(정지)인 경우에도 디바이스의 메모리 가용성에 따라 작업이 중단될 수 있습니다.UI를 사용하지 않고 프로세스를 실행하려면Service
이 문서에는 서비스에 대해 다음과 같이 기재되어 있습니다.
서비스는 시각적 사용자 인터페이스가 없으며 백그라운드에서 무기한 동안 실행됩니다.예를 들어 서비스는 사용자가 다른 문제를 처리할 때 백그라운드 음악을 재생하거나 네트워크를 통해 데이터를 가져오거나 무언가를 계산하여 필요한 작업에 결과를 제공할 수 있습니다.
이것들은, 고객의 요건에 적절한 것 같습니다.
무효화를 시도하다onBackPressed()
정의되어 있습니다.액티비티 클래스
다른 사람에게 도움이 된다면, 저는 2개의 레이아웃을 사용하여 작업을 했습니다.그것들이 페이지1 > 페이지2의 구조를 에뮬레이트하려고 했습니다.그것들이 페이지2에 있고, 뒤로 버튼을 눌렀다면, 1페이지의 뒤로 버튼을 눌렀다면, 그것은 여전히 정상적으로 동작할 것입니다.꽤 기본이지만 효과가 있습니다.
@Override
public void onBackPressed() {
// check if page 2 is open
RelativeLayout page2layout = (RelativeLayout)findViewById(R.id.page2layout);
if(page2layout.getVisibility() == View.VISIBLE){
togglePageLayout(); // my method to toggle the views
return;
}else{
super.onBackPressed(); // allows standard use of backbutton for page 1
}
}
도움이 되길 바라며 건배
작업 예시..
super.onBackPressed()를 호출하지 마십시오.
@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);
}
이와 같이 [뒤로]버튼은 [홈]버튼]와 같이 동작합니다.액티비티를 종료하지 않고 백그라운드로 가져옵니다.
두 번째 방법은 전화하는 것입니다.moveTaskToBack(true);
에onBackPressed
반드시 제거해 주세요.super.onBackPressed
액티비티가 백그라운드로 이행하고 있지만 아직 종료되지 않은 경우 액티비티 라이프 사이클의 일부로 호출됩니다.onResume()에 대응합니다.
액티비티 B가 액티비티 A의 앞에서 기동하면, 이 콜백은 A로 호출됩니다.A의 onPause()가 반환될 때까지 B는 생성되지 않으므로 반드시 다음 작업을 수행하십시오.enter code here
여기서 장황한 짓은 하지 마세요.
이 콜백은 대부분 액티비티가 편집 중인 영속적인 상태를 저장하기 위해 사용되며, 이 액티비티를 먼저 종료하지 않고 새로운 액티비티를 시작할 수 있는 리소스가 부족할 경우 손실되지 않도록 하기 위해 사용됩니다.
또, 다음의 액티비티로 가능한 한 빨리 전환하기 위해서, 또는 카메라등의 배타적인 액세스의 자원을 닫기 위해서, 애니메이션의 정지나 CPU를 큰폭으로 소비하는 다른 작업을 실시하는 것도 좋은 장소입니다.
Android 2.0 이후 onBackPressed()를 덮어씁니다.예를 들어
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
새로운 커스텀 편집 텍스트를 사용하여 @Mirko N. answser를 사용하고 있습니다.
public class EditViewCustom extends EditText {
Button cancelBtn;
RelativeLayout titleReleLayout;
public EditViewCustom(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public EditViewCustom(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EditViewCustom(Context context) {
super(context);
}
public void setViews(Button cancelBtn,RelativeLayout titleReleLayout){
this.cancelBtn = cancelBtn;
this.titleReleLayout = titleReleLayout;
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
Log.d("KEYCODE_BACK","KEYCODE_BACK");
cancelBtn.setVisibility(View.GONE);
this.setFocusableInTouchMode(false);
this.setFocusable(false);
titleReleLayout.setVisibility(View.VISIBLE);
return super.onKeyPreIme(keyCode, event);
}
return super.onKeyPreIme(keyCode, event);
}
}
그런 다음 활동 데이터를 설정합니다.
searchEditView.setViews(cancelBtn, titleRelativeLayout);
감사합니다.
위의 모든 해결책을 시도해 보았지만, 어느 것도 효과가 없었습니다.다음 코드는 OnCreate가 호출되는 방식으로 MainActivity로 돌아가려고 할 때 도움이 되었습니다.
의도.FLAG_ACTIVITY_CLEAR_TOP가 핵심입니다.
@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
언급URL : https://stackoverflow.com/questions/2000102/override-back-button-to-act-like-home-button
'programing' 카테고리의 다른 글
exit()와 abort()의 차이점은 무엇입니까? (0) | 2022.08.11 |
---|---|
Vue - 소품을 사용하여 컴포넌트에 클래스 이름 추가 (0) | 2022.08.11 |
확장된 v-data-table이 Vuetify로 축소될 때 메서드 트리거 (0) | 2022.08.11 |
문자를 문자열로 변환하는 방법 (0) | 2022.08.11 |
Vue: 목록에 항목 추가 (0) | 2022.08.11 |