Как закрыть приложение с помощью кнопки выхода и возврата

В моем приложении у меня есть страница меню, содержащая 4 кнопки «История», «Типы», «Преимущества» и «Выход». После открытия страницы меню Splash Screen. Если я начну историю, тип или выгоду. Я не заканчиваю действие меню, потому что, если я закончу это, то при нажатии на значок навигации вверх в панели действий приложение закроется. Когда я выполняю любое из трех действий и нажимаю кнопку возврата устройства, я возвращаюсь к действию меню. И если затем я нажму кнопку выхода или возврата с устройства. EndSplash запускается и приложение завершает работу, как я и хочу. Но через секунду приложение перезагружается. Как закрыть приложение при нажатии кнопки «Выход» и «Назад»?

У меня также есть навигационные вкладки под панелью действий. Минимальный уровень API 8.

В меню активность-

exit = (Button) findViewById(R.id.exit);
        exit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                i = new Intent(MainActivity.this, EndSplash.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                startActivity(i);
                finish();
            }
        });
@Override 
    public void onBackPressed() {
        super.onBackPressed();
        i = new Intent(MainActivity.this, EndSplash.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(i);
        finish();
    } 

А в истории,видах и преимуществах деятельности-

public void onBackPressed()  
    {    
    startActivity(new Intent(this, MainActivity.class));  
        finish();
    }

person John R    schedule 04.02.2014    source источник
comment
почему вы хотите выйти из приложения. прочитайте это stackoverflow.com/questions /2033914/   -  person Raghunandan    schedule 04.02.2014
comment
Как спросил Рагунандан :) Мне любопытно, как обычно вы не выходите из приложения, так как в следующий раз пользователю нужно будет дольше ждать, пока приложение откроется.   -  person Lukasz 'Severiaan' Grela    schedule 04.02.2014
comment
У вас есть EndSplashScreen, показывающий, когда пользователь покидает приложение? Для меня это ужасный UX, совершенно не соответствующий тому, как обычно работает Android...   -  person 2Dee    schedule 04.02.2014
comment
@2Dee Я знаю, но почему приведенный выше код не завершает все действия?   -  person John R    schedule 04.02.2014


Ответы (4)


Попробуйте это, чтобы выйти из приложения: -

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
person Yugesh    schedule 04.02.2014

Вы должны использовать BroadcastReceiver при нажатии кнопки, чтобы завершить все действия, зарегистрированные для нее. вы должны зарегистрировать все действия на его oncreate(). Существует множество реализаций для широковещательного приемника.

person Viswanath Lekshmanan    schedule 04.02.2014

Чтобы завершить все свои действия, вы можете создать класс Utils.java и добавить в него этот метод:

public static List<Context> listContext = new ArrayList<Context>();

public static void finishActivities() 
{

    System.out.println("inside finishActivities:: ");

    for (Context context : Utils.listContext) {
        if(context!=null)
         ((Activity) context).finish();
    }
    Utils.listContext.clear();
}

и добавьте свой контекст активности в список, например:

Utils.listContext.add(this);

и вызовите этот метод из вашей активности onBackPressed(), например:

Utils.finishActivities();
person Ankit    schedule 04.02.2014

вы можете использовать этот код:

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
PackageManager pm1 = context.getPackageManager();
List<android.content.pm.ResolveInfo> activities = pm1.queryIntentActivities(homeIntent, 0);
String className = activities.get(0).activityInfo.taskAffinity;
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startMain.setPackage(className);
context.startActivity(startMain);
((Activity) context).finish(); 
person Mohammad Rababah    schedule 04.02.2014
comment
Всякий раз, когда я запускаю свое приложение в первый раз и нажимаю кнопку «Домой», приложение должно возобновиться и начать с этого момента в следующий раз. Но его начало с начала. После этого всякий раз, когда я запускаю свое приложение и нажимаю домой, его возобновление с этого момента. - person John R; 05.02.2014