android studio закрыть приложение программно

Android: закрытие приложения по кнопке «назад»

Подскажите, пожалуйста, как правильно закрывать приложение по нажатию кнопки «назад»? Сейчас использую вот такой код (в Activity):

Но что-то мне говорит, что это не совсем верно и избыточно. Приложение — игра с libgdx, используется только одно Activity.

a1c0702f655b7673d5f08e44459cbf96

Когда Вы закрываете приложение кнопной «Назад», то вызывается метод onDestroy(). Для этого перехватывать нажатие этой кнопки в методе onBackPressed() не имеет смысла. Достаточно сделать так:

public void onDestroy() <
moveTaskToBack(true);

Перехватывать нажатие кнопки «Назад» имеет смысл тогда, когда надо реализовать подтверждение выхода из игры или что-то в этом роде.

Как правильно завершить свой поток в Actitvity в onDestroy? Не подумайте чего — все облазил — каких методов только не предлагается. Но видимо так?

А если еще и SurfaceView используется, то нужно его принудительно завершать? удалять калбак из него? finish() при использовании SurfaceView не всегда закрывает приложение корректно — иногда появлzется исключение — видимо не закрывается поток рисования в SurfaceView, хотя в SurfaceView.onDestroy и делается drawingThread.interrupt().

Короче у меня работоспособный вариант выглядит так примерно ACTIVITY:

Но при этом у потока backgroundThread есть «чудо» переменная indicatorOfWork

Тогда как должен выглядеть для кнопки НАЗАД этот метод?

а то все возможные варианты, что приходили на ум давали исключение при нажатии Назад

Источник

Клавиатура и аппаратные кнопки

Аппаратные и клавиатурные клавиши

Обработка аппаратных клавиш и клавиатуры имеет следующие методы

Кроме клавиш, есть ещё другие методы обработки пользовательского ввода (здесь не рассматриваются):

Чтобы ваши компоненты и активности реагировали на нажатия клавиш, переопределите обработчики событий onKeyUp() и onKeyDown():

Параметр keyCode содержит код клавиши, которая была нажата; сравнивайте его со статическими кодами клавиш, хранящимися в классе KeyEvent, чтобы выполнять соответствующую обработку.

Параметр KeyEvent также включает в себя несколько методов: isAltPressed(), isShiftPressed() и isSymPressed(), определяющих, были ли нажаты функциональные клавиши, такие как Alt, Shift или Sym. Статический метод isModifierKey() принимает keyCode и определяет, является ли нажатая клавиша модификатором.

Кнопка Back: Вы уверены, что хотите выйти из программы?

Кнопка Back (Назад) закрывает приложение, точнее текущую активность, но если приложение состоит из одной активности, то это равносильно закрытию всего приложения. В большинстве случаев вам нет никакого дела до неуклюжего пользователя, который по ошибке нажал на кнопку «Back» вместо кнопки Подарить разработчику миллион. Но, если ваша программа, будучи запущенной на телефоне пользователя, потихоньку списывает деньги клиента в счёт Фонда голодных котов, то нужно дать ему шанс задуматься и вывести диалоговое окно с вопросом: «А действительно ли вы хотите выйти из программы?»

Чтобы реализовать такую задачу, нужно переопределить поведение кнопки «Back» через метод активности onBackPressed() следующим образом:

Данный метод появился в Android 2.0. Для более ранних версий использовался стандартный код обработки onKeyDown():

Двойное нажатие на кнопку Back

Кнопка Home

Можно отследить нажатие кнопки Home через метод активности onUserLeaveHint():

Обработка кнопки Menu

У телефона, кроме кнопки «Back», есть ещё кнопка «Menu» для вызова команд меню (на старых устройствах). Если необходимо обрабатывать нажатия этой кнопки (например, управление в игре), то используйте следующий код (обычное и долгое нажатие):

Должен заметить, что длинное нажатие трудно уловить, так как обычное нажатие постоянно подавляет это событие.

Другие кнопки

Ну на самом деле можно отслеживать не только нажатие кнопки Меню, но и кнопку Поиска и кнопки увеличения громкости.

Обратите внимание, что для кнопки громкости возвращаем false, т.е. мы не переопределяем поведение кнопки, а оставляем её на усмотрение системы.

Пример работы с кнопками громкости можно посмотреть в статье Рингтоны. Управление громкостью

По такому же принципу работает метод onKeyUp(). Метод onKeyLongPress() можно использовать, если в методе onKeyDown() был задействован метод event.startTracking(), отслеживающий поведение кнопки. В нашем примере мы отслеживали кнопку Volume_Up.

Прячем клавиатуру

Бывает так, что при запуске активности сразу выскакивает клавиатура. Если такое поведение не нравится, то пропишите в манифесте нужное значение у атрибута android:windowSoftInputMode (см. ниже).

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

Можно избавить компонент от фокуса:

Чтобы принудительно показать клавиатуру, используйте следующий код:

Кстати, повторный вызов метода закроет клавиатуру. Указанный способ не требует наличия элементов View.

Если продолжить тему показа клавиатуры, то может возникнуть следующая ситуация. Допустим у вас есть DialogFragment с EditText. При выводе диалогового окна вам нужно установить фокус на EditText и показать клавиатуру:

Либо используйте тег для нужного EditText.

Изменить вид клавиатуры для EditText

Когда элемент EditText получает фокус, то появляется клавиатура. Можно установить нужный вид клавиатуры через атрибут InputType или программно через метод setInputType():

Переопределяем кнопку Enter

Кроме атрибута InputType можно также использовать атрибут android:imeOptions в компоненте EditText, который позволяет заменить кнопку Enter на клавиатуре на другие кнопки, например, Next, Go, Search и др. Возможны следующие значения:

Чтобы увидеть все варианты воочию, можете создать несколько текстовых полей и переключаться между ними:

Чтобы реагировать на нажатия разных состояний кнопки Enter, необходимо реализовать интерфейс TextView.OnEditorActionListener. Небольшой пример:

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

Также можно поменять текст на кнопке с помощью атрибута android:imeActionLabel:

Текст на кнопке поменялся, но вот обработка Enter из предыдущего примера у меня перестала работать. Мой неработающий код на память.

Upd: Читатель Максим Г. предложил следующее решение проблемы. Убираем атрибуты imeOptions, imeActionId, imeActionLabel и установим их программно.

По желанию можете отслеживать только у нужного поля. Поставьте дополнительное условие после первого блока if:

Интерфейс OnKeyListener

Чтобы среагировать на нажатие клавиши внутри существующего представления из активности, реализуйте интерфейс OnKeyListener и назначьте его для объекта View, используя метод setOnKeyListener(). Вместо того, чтобы реализовывать отдельные методы для событий нажатия и отпускания клавиш, OnKeyListener использует единое событие onKey().

Используйте параметр keyCode для получения клавиши, которая была нажата. Параметр KeyEvent нужен для распознавания типа события (нажатие представлено константой ACTION_DOWN, а отпускание — ACTION_UP).

Сдвигаем активность

Чтобы всплывающая клавиатура не заслоняла элемент интерфейса, который получил фокус, а сдвигала активность вверх, можно в манифесте для нужной активности прописать атрибут android:windowSoftInputMode с параметром adjustPan:

Также доступны и другие параметры:

Параметры с префиксом state можно комбинировать с настройками с префиксом adjust:

Например, чтобы показать клавиатуру при старте активности, используйте stateVisible.

Данные настройки доступны и программно. Например, код для adjustResize:

Кстати, этот код не сработает в полноэкранном режиме (флаг FLAG_FULLSCREEN). Сверяйтесь с документацией.

Узнать выбранный язык на клавиатуре

Для определения текущего языка на клавиатуре можно использовать следующий код.

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

Источник

Как выйти из приложения Android программно

Я нашел несколько кодов для выхода из приложения Android программно. Вызов любого из следующего кода в onDestroy() полностью закроет приложение?

Я не хочу запускать приложение в фоновом режиме после нажатия кнопки «Выйти». Просьба предложить мне использовать любой из этих кодов для выхода из приложения? Если да, какой код я могу использовать? Это хороший способ выйти из приложения в Android?

27 ответов

Начиная с API 16, вы можете использовать метод finishAffinity, который, кажется, довольно близок к закрытию всех связанных действий по его имени и описанию Javadoc:

this.finishAffinity ();

Завершите это действие, а также все действия непосредственно под ним в текущем задании, которые имеют ту же привязку. Это обычно используется, когда приложение может быть запущено для другой задачи (например, из ACTION_VIEW типа контента, который он понимает), и пользователь использовал навигацию вверх для переключения из текущей задачи в свою собственную. В этом случае, если пользователь перешел к другим активным действиям второго приложения, все они должны быть удалены из исходной задачи как часть переключения задачи.

Обратите внимание, что это завершение не позволяет вам доставлять результаты к предыдущему действию, и будет выдано исключение, если вы попытаетесь это сделать.

Начиная с API 21 вы можете использовать очень похожую команду

finishAndRemoveTask();

Завершает все действия в этой задаче и удаляет ее из списка недавних задач.

это лучший способ выйти из приложения.

Лучшее решение для меня.

Если вы будете использовать только finishAffinity(); без System.exit(0); Ваше приложение будет закрыто, но выделенная память все еще будет использоваться вашим телефоном, так что. если вы хотите полностью очистить приложение, используйте оба из них.

Это самый простой метод, который работает где угодно, выйдите из приложения по-настоящему, у вас может быть много открытых действий, и все будет без проблем.

пример по нажатию кнопки

или если вы хотите что-то приятное, например, с диалоговым окном предупреждения с 3 кнопками ДА НЕТ и ОТМЕНА

В противном случае, если вы абсолютно уверены, используйте

В ответ на комментарий @dave Appleton: во-первых, прочитайте большой комбо-вопрос @ gabriel, опубликованный: » Не одобряется ли выход из приложения?

Итак, в конце концов, конечно, finish() не убивает ничего, но это все еще инструмент, который вам нужен, я думаю. Если есть вариант «убить все действия», я его еще не нашел.

Источник

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

Я уверен, что этот вопрос задавался несколько раз, потому что я мало читал. Мой клиент хочет, чтобы я нажал кнопку в его приложении, где пользователи могут нажать и выйти. Я прочитал это и нашел, что call finish() сделает это. Но, закончить – это только закрытие текущей текущей активности? У меня много действий, поэтому в этом случае я должен передать экземпляр каждого действия и закончить их или сделать каждое действие в шаблоне Singleton.

Я также узнал, что Activity.moveTaskToBack(true) может попасть на главный экран. ОК, это не закрытие, а фоновая обработка процесса. Так это эффективно?

Какой метод следует использовать для закрытия приложения ПОЛНОСТЬЮ? Любое из описанных выше или любого другого метода / другого использования вышеуказанных методов?

Вы можете вызвать System.exit (); Чтобы выйти из всех занятий.

Фактически каждый ищет закрытие приложения в событии onclick, где бы это ни было …

Итак, друзья друзей пробовали этот код. Поместите этот код в событие onclick

Если вы хотите выйти из приложения, используйте этот код внутри нажатой кнопки:

Это слишком легко. Используйте System.exit(0);

В общем, есть две ситуации. 1. Вы можете выйти из действия 2. Или вы хотите выйти из приложения.

Вы можете выйти из операции, используя следующий код.

Но это не приведет к уничтожению основных действий в одном приложении. Там для этого будет просто минимизировать приложение.

Я хочу выйти из приложения формы, используя следующий код, который закончит процесс приложения.

Для моноразработки просто используйте

Попробуйте это по вызову. Я иногда использую его в onClick кнопки.

Вместо того, чтобы закрывать приложение, открывается панель управления, поэтому похоже, что ваше приложение закрыто.

Прочитайте этот вопрос для большей ясности android – код выхода из приложения

Как насчет this.finishAffinity()

Завершите это действие, а также все действия сразу под ним в текущей задаче, имеющей одинаковую близость. Обычно это используется, когда приложение может быть запущено на другую задачу (например, из ACTION_VIEW типа контента, который он понимает), и пользователь использовал навигацию вверх для переключения из текущей задачи и в свою собственную задачу. В этом случае, если пользователь перешел в другие действия второго приложения, все из них должны быть удалены из исходной задачи как часть переключателя задачи. Обратите внимание, что это завершение не позволяет доставлять результаты предыдущему действию, и если вы пытаетесь сделать это, будет выбрано исключение.

Призрачная активность, вызываемая с помощью singleletop и finish () на onCreate, должна делать трюк

Поместите это в свой onClic:

Просто используйте код в своем обратном порядке

Он работает, используя только moveTaskToBack(true);

Если вы используете EventBus (или действительно любую другую паб / вспомогательную библиотеку) в своем приложении для связи между действиями, вы можете отправить им явное событие:

Это очистит Task (стек действий) и начнет новую задачу

Если вы используете как завершение, так и выход из приложения,

Источник

Как закрывать приложение?

Заранее извеняюсь за глупый вопрос, но чет не могу найти ответа, или не так задаю вопрос гуглу))

как закрыть приложение? какой метод это делает? пользую finish(); но он закрывает только текущую активити, а как выйти совсем?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как красиво закрывать приложение?
Здравствуйте! Столкнулся с проблемой: если я закрываю своё приложение при помощи диалогового окна.

tickКак остановить приложение,но не закрывать его
Написал крестики нолики,дошел до этапа функции победы,так вот,написал часть кода которая определяет.

Закрывать приложение, запущенное с флешки при ее извлечении
Здравствуйте! Есть приложение, запущенное с флешки. Необходимо сделать чтобы оно автоматически.

На примере двух Activity: MainActivity и SecondActivity

В SecondActivity есть некая кнопка «выход». На ее нажатие вешаем:

Этот код вызывает MainActivity и чистит весь стек над ним. И посылаем метку закрытия

В MainActivity в onCreate сразу после конструктора суперкласса пишем

Мне кажется, что проще всего генерить широковещательное намерение и в каждой активити на него зарегить свой BroadcastReciever, который для каждой активити будет вызывать finish()

А если активити только 2, то можно юзать startActivityForResult и по получении определенного ответа от 2-ой активити закрывать првую

android.os.Process.killProcess (int pid)

public static final void killProcess (int pid)
Added in API level 1

Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller’s packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other’s processes.

Просто у меня такая же проблема. Мне надо отправить письмо со своей программы, уже жне недели бьюсь над этой проблемой. И одно из пробных решений было использование Intent. Открывается Gmail, но вот как сделать чтоб он отправил и сам при этом закрылся, не написано, то смысла в таком решении я не вижу.

Одно из вариантов моего решения есть следующий код

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • android studio вылетает приложение после запуска
  • android studio версия приложения