Выход из приложения Android на кнопку «Назад»

У меня есть приложение, в котором я занимаюсь различными видами деятельности. В 1 упражнении я хочу, чтобы, когда пользователь нажимал кнопку «Назад», я хотел, чтобы приложение закрывалось и отображался домашний экран.

Код

public boolean onKeyDown(int keyCode, KeyEvent event) 
        {
            //Handle the back button
            if(keyCode == KeyEvent.KEYCODE_BACK) 
                {
                    //Ask the user if they want to quit
                    new AlertDialog.Builder(this)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setTitle("Exit")
                    .setMessage("Really Exit ?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
                        {
                            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();
                    return true;
                }
            else 
                {
                return super.onKeyDown(keyCode, event);
                }
        }

Когда я запускаю это и нажимаю кнопку «Назад», отображается домашний экран, но когда я запускаю его во второй раз, я получаю вывод консоли в виде

ActivityManager: Warning: Activity not started, its current task has been brought to the front.

И активность, в которой нажата кнопка возврата, отображается. Я думаю, что приложение не убивается и работает в фоновом режиме. Отметим, что это не начальная активность моего приложения.

Может кто-нибудь помочь мне, я новичок.

 Harneet Kaur18 июн. 2012 г., 06:48
Ваш вопрос не понятен, дорогой.
 Carl07 нояб. 2012 г., 01:31
Таким образом, если вы перехватываете кнопку «Назад» и вместо этого открываете диалоговое окно, то вам придется самостоятельно вызывать finish () в обработчике onClick () для кнопки «Да» в этом диалоговом окне.
 Carl07 нояб. 2012 г., 01:31
Точка информации: Начиная с Android 2.0, обработчик верхнего уровня по умолчанию для кнопки «Назад» был в реализации по умолчанию (класс Activity) onKeyUp (), а не onKeyDown (). Поэтому, если вы собираетесь попытаться изменить это поведение (например, запросив подтверждение), то место, где это можно сделать, вероятно, будет переопределено onKeyUp (). Этот Activity.onKeyUp () по умолчанию сам вызывает onBackPressed (), а его реализация по умолчанию - метод finish (), который завершает текущую (основную) активность.
 GAMA18 июн. 2012 г., 06:52
записыватьfinish(); в onPause () ...

Ответы на вопрос(7)

Решение Вопроса

Intent Вы использовали для перехода в другую деятельность, вы должны следовать этому пути для передачи намерения просто пройтиflag  для каждого намерения, как указано ниже и после началаActivity с помощьюstartActivity() ты должен добавитьfinish() после этого демо-кода, как указано ниже

Intent i=new Intent(firstActivity.this,secondActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
 kumar piyush18 июн. 2012 г., 10:14
да, это дает результат, который я хочу
 18 июн. 2012 г., 07:45
сделано или нет таким способом
 kumar piyush18 июн. 2012 г., 07:38
Именно так я и реализую

  public abstract class AppBaseActivity extends Activity {
public static final String FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION =    "com.hrupin.FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION";
private BaseActivityReceiver baseActivityReceiver = new BaseActivityReceiver();
public static final IntentFilter INTENT_FILTER = createIntentFilter();

private static IntentFilter createIntentFilter(){
    IntentFilter filter = new IntentFilter();
    filter.addAction(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION);
    return filter;
}

protected void registerBaseActivityReceiver() {
    registerReceiver(baseActivityReceiver, INTENT_FILTER);
}

protected void unRegisterBaseActivityReceiver() {
    unregisterReceiver(baseActivityReceiver);
}

public class BaseActivityReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION)){
            finish();
        }
    }
} 

protected void closeAllActivities(){
    sendBroadcast(new Intent(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION));
}
  }

Затем вам нужно расширить все другие классы из этого класса, как в примере ниже:

    public class FirstActivity extends AppBaseActivity implements OnClickListener {
/** Called when the activity is first created. */

private Button buttonOpenNextActivity;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first);
    registerBaseActivityReceiver();
    buttonOpenNextActivity = (Button)findViewById(R.id.buttonOpenNextActivity);
    buttonOpenNextActivity.setOnClickListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unRegisterBaseActivityReceiver();
}

@Override
public void onClick(View v) {
    /* OPEN SECOND ACTIVITY.*/
    startActivity(new Intent(this, SecondActivity.class));
}
  }

Другой класс:

       public class SecondActivity extends AppBaseActivity implements OnClickListener {
private Button buttonOpenNextActivity;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);
    registerBaseActivityReceiver();
    buttonOpenNextActivity = (Button)findViewById(R.id.buttonOpenNextActivity);
    buttonOpenNextActivity.setOnClickListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unRegisterBaseActivityReceiver();
}

@Override
public void onClick(View v) {
    /* OPEN THIRD ACTIVITY.*/
    startActivity(new Intent(this, ThirdActivity.class));
}
            }

Последний класс:

      public class ThirdActivity extends AppBaseActivity  implements OnClickListener  {
private Button buttonCloseAllActivities;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.third);
    registerBaseActivityReceiver();
    buttonCloseAllActivities = (Button)findViewById(R.id.buttonCloseAllActivities);
    buttonCloseAllActivities.setOnClickListener(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unRegisterBaseActivityReceiver();
}

 @Override
protected void onBackPressed() {
    closeAllActivities();
    super.onBackPressed();
}
}

Теперь при нажатии кнопки «Назад» в третьем упражнении все остальные действия также будут полностью завершены.

1 / Не забудьте зарегистрировать получатель в onCreate и отменить регистрацию () в ondestroy ().

@Override
public void onBackPressed()
{
      moveTaskToBack(true);
}

Также проверьте этоСсылка на сайт

 kumar piyush18 июн. 2012 г., 06:58
хорошо, я попытаюсь
 18 июн. 2012 г., 06:56
Он не выйдет из приложения. Это поместит приложение в фоновый процесс.
 18 июн. 2012 г., 07:00
Я отредактировал свой ответ. Пожалуйста, проверьте это

то, когда захочет освободить выделенные ей ресурсы. Вы не можете на самом деле реализоватьexit Концепция приложения в Android. Пользователь может просто отойти от вашегоActivity и вернись к нему. Если он должен быть перезапущен с первого разаActivity или возобновил, где он оставил, до ОС Android, а не вы.

Прочитайте этот пост, чтобы понять философию того, как должны создаваться приложения для Android и почему вы не хотите выходить по собственному желанию: Не одобряется ли выход из приложения?

 18 июн. 2012 г., 06:57
Ваша заявка состоит из несколькихActivities, Вам придется позвонитьfinish() на все.
 18 июн. 2012 г., 07:04
@kumarpiyush читатьthis post чтобы лучше понять модель приложения Android. Вы пойметеwhy Вы не должны выходить из себя.
 kumar piyush18 июн. 2012 г., 06:52
Итак, когда я перехожу от моего приложения к домашнему экрану, а затем перезапускаю свое приложение. будет отображаться последнее действие, а не начальное действие. В любом случае, я могу достичь желаемого результата?
 18 июн. 2012 г., 06:53
Ты можешь позвонитьfinish() на чтоActivity сообщить ОС, что с этим поконченоActivity и ОС свободна уничтожать и освобождать ресурсы, выделенные ей.
 18 июн. 2012 г., 06:55
А что касается вашей отчаянной попытки выйти из приложения, то вы должны позвонитьfinish() на каждомActivity как только вы уйдете от него.

тогда вам нужно завершить все предыдущие действия, когда вы нажмете кнопку «Назад» на этом экране, для этого следует использовать концепциюBROADCAST RECIEVER ...... означает, что вы передали намерение на эту обратную печать, которая завершит все предыдущие действия.

 kumar piyush18 июн. 2012 г., 06:54
Можете ли вы объяснить, как именно использовать концепцию вещательного приемника?

finish(); после этой строкиstartActivity(intent) это закончить вашу деятельность.

Спасибо

 kumar piyush18 июн. 2012 г., 06:53
Добавление финиша приведет к выходу только из текущей активности, а не из приложения, если я не ошибаюсь?

Насколько мне известно, вы должны использовать broadCast Reciever для завершения приложения и передачи намерения на домашний экран.

MoreOver Warning - ничто, прежде чем запускать ваше приложение, просто нажмите Enter в вашем коде или оставьте пустое место, а затем сохраните его и перезапустите приложение. Это будет работать нормально ....

 kumar piyush18 июн. 2012 г., 06:54
Я не хочу переустанавливать свое приложение. Можете ли вы объяснить, как использовать приемник Broadcast?

Ваш ответ на вопрос