Как заставить ОС запускать приложения во время запуска?

Я использую Android 4.3 Jelly Bean на Samsung Galaxy SIII.

Я пытаюсь выяснить, как настроить такие приложения, как Skype, для автоматического запуска после того, как система прошла процесс начальной загрузки, завершила загрузку и запустилась. Я хотел бы иметь возможность сделать это через приложение, которое не требует рутирования моего устройства, если это возможно. Когда я просматриваю информацию, относящуюся к Skype, в диспетчере приложений по умолчанию, я вижу, что приложение Skype использует разрешение «запускать при запуске», что означает, что должна быть возможность настроить это приложение для запуска при запуске, но я не смог найти флажок для этого ни на этом экране, ни в настройках приложения Skype. Аналогичная ситуация может иметь место и с другими приложениями.

В этом посте рассматривается предотвращение запуска приложений и упоминаются полезные сторонние приложения, такие как Autorun Manager , который, по-видимому, в основном связан с блокировкой запуска и перезапуска приложений после их уничтожения, или, по крайней мере, это то, что я понял из описания приложения. в магазине игр и Autostarts , который управляет тем, какие приложения запускаются событиями.

Итак, вот мои вопросы:

  • Почему на Android нет предустановленного собственного приложения Startup Manager для управления тем, какие приложения должны запускаться по умолчанию, а какие нет?

  • Если скайпу требуется разрешение «запускать при запуске», а в ОС или в приложении нет места для настройки автоматического запуска такого приложения, то что дает это разрешение?

Спасибо.

Я нахожу ваш второй вопрос интересным, так как я также только что проверил, было ли что-то, что Skype запускал при запуске (возможно, фоновая служба?), и я ничего не видел. Я бы сказал «вероятно, разработчик забыл удалить запрос на разрешение», если только он по каким-то причинам не работает на других устройствах.
Да я тоже не понимаю. После перезагрузки моей системы в диспетчере задач я нахожу: «Активные приложения: 0», «Очистить настройки по умолчанию: Запустить по умолчанию: YouTube [Очистить]». Если YouTube запускается по умолчанию, как указывает диспетчер задач, то почему он не отображается в активных приложениях диспетчера задач. Возможно, приложение должно быть запущено на переднем плане, чтобы оно было указано как «активное приложение». Затем в диспетчере приложений Skype не отображается на вкладке «РАБОТАЕТ», но если я нажму на него на вкладке «ЗАГРУЗКИ» или на ВСЕХ вкладках, появится включенная кнопка «Принудительная остановка», которую можно использовать для его остановки.
Таким образом, Skype можно остановить, даже если он не отображается в диспетчере задач или на вкладке «РАБОТАЕТ» диспетчера приложений. Я не понимаю, что все это значит.
Я только что проверил еще раз, и кажется, что во всех приложениях включена кнопка «принудительно закрыть», даже для тех, которые не были открыты, и я также не знаю причину.
Я серьезно не знаю, может быть, это означает, что их компоненты широковещательного приемника будут вызываться, когда будут отправлены соответствующие события, на которые они настроены. Но это всего лишь дикая догадка, которая может быть совершенно ошибочной. Может кто прояснит этот вопрос.
Я думаю, что ваш второй вопрос очень похож на подход Windows. Когда вы устанавливаете приложения, использующие это разрешение, они могут получать трансляцию и оттуда, например, устанавливать службу. А вот вариант запускать или не запускать при запуске очень Windows. Обычно приложения Android вначале заявляют о своих потребностях в разрешениях, а затем решают, как действовать и реагировать.
@joaquin, спасибо за ответ. Это очень понятно и полезно.

Ответы (1)

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

Приложения с разрешением «запускать при запуске» могут регистрировать «слушателя» для трансляции, BOOT_COMPLETEDкоторый система всегда выдает при этом событии. Таким образом, они получают уведомление об этом событии и могут решить выполнить какое-либо действие. Это может быть запуск какой-то фоновой службы, которая продолжает работать, но они также могут сделать что-то небольшое, а затем снова выйти.

ИМХО, в Skype есть возможность автоматического входа в систему после загрузки, чтобы вы были доступны для входящих звонков. AFAIR это даже поведение приложения по умолчанию. Если для этого не работает фоновая служба, тогда он может зарегистрироваться для обмена облачными сообщениями, что снова «разбудит его» для обработки входящих вызовов. Таким образом, приложению не нужно было постоянно работать в фоновом режиме. Действительно, приложение также объявляет com.google.android.c2dm.permission.RECEIVEразрешение (C2DM означает «Обмен сообщениями устройств Cloud 2», который теперь является GCM = Google Cloud Messaging), так что это может быть объяснением.


ОБНОВЛЯТЬ:

Андрей Т. подтвердил это в комментариях:

Наконец-то я проверил манифест Skype для Android, открыв его APK-файл ( base.apk), и действительно там есть com.skype.android.push.DeviceBootReceiverфильтр намерений android.intent.action.BOOT_COMPLETED. Хотя я не исследовал, что он делает. Кроме того, я забыл, что широковещательный приемник не указан в списке запущенных процессов, как упоминал Джон (я могу подтвердить, что это разработчик). Значит, вы правы в своих предположениях :)

Это также то, во что я верил, но не уверен после подтверждения того, что после загрузки нет никакого процесса переднего плана / фона, связанного со Skype. Возможно, стартап регистрируется только для обмена облачными сообщениями, но опять же, насколько я знаю, сообщение невозможно обработать, если нет запущенного процесса, который бы это обработал. Хотя я могу ошибаться.
Спасибо @Izzy за ваш ответ. В диспетчере приложений я вижу, что Skype использует разрешение «получать данные из Интернета», которое соответствует разрешению C2DM com.google.android.c2dm.permission.RECEIVE. Поскольку Skype не указан в списке, RUNNINGя предполагаю, что когда в фоновом режиме не работает процесс или служба, а разрешение «запускать при запуске» (android.permission.RECEIVE_BOOT_COMPLETED) позволяет Skype зарегистрировать широковещательный приемник для C2DM, и когда сообщение C2DM приходит с сервера, приемник вещания запускает активность Skype.
Я предполагаю, что широковещательные приемники не указаны RUNNINGв диспетчере приложений, поскольку они запускаются другой системной службой (имя которой я сейчас не могу вспомнить). Поправьте меня если я ошибаюсь. Спасибо.
@ЭндрюТ. вот где я тоже должен пройти: не будучи разработчиком, я не понимаю, как именно это работает. Но мои ожидания совпадают с тем, что Джон описал в своих комментариях: Skype запускается при загрузке, регистрирует широковещательный приемник и завершает работу. Всякий раз, когда приходит сообщение GCM и направляется в Skype, соответствующая широковещательная рассылка снова «пробуждает/запускает» Skype для его обработки. Таким образом, нет необходимости в «бесполезном» процессе для потребления ресурсов. Кстати: приложение Stack Exchange работает так же :)
Наконец-то я проверил манифест Skype для Android, открыв его APK-файл ( base.apk), и действительно там есть com.skype.android.push.DeviceBootReceiverфильтр намерений android.intent.action.BOOT_COMPLETED. Хотя я не исследовал, что он делает. Кроме того, я забыл, что широковещательный приемник не указан в списке запущенных процессов, как упоминал Джон (я могу подтвердить, что это разработчик). Значит, вы правы в своих предположениях :)
Спасибо за расследование, Андрей! Я включил это в свой ответ (конечно, отдавая вам должное), чтобы он не «терялся здесь» :)