Android autostart application on boot

Auto-start custom Android applications

When creating customized Android firmware, you must typically launch a specific Android application after system boots. Android has two mechanisms for this:

  1. Start an application after Android boot:
    • Valid for a standard Android system with multiple applications.
    • No need to modify and compile Android sources.
  1. Replace the default Android Home application:
    • Recommended if your system consists only of this application.
    • May require you to modify and compile Android sources.

Start an application after Android boot

When an Android system boots, it sends out a boot complete event. Android applications can listen and capture this event to take specific actions, such as automatically starting an activity or service.

You can use this mechanism to create an application with the required permissions to listen for the boot complete event and automatically start an activity or service every time Android starts up. To do so, follow these steps:

  1. Declare the permission in AndroidManifest.xml. Add the android.permission.RECEIVE_BOOT_COMPLETED permission to your application’s manifest file just before the application declaration node:
  1. Define the Activity that will be auto-started in the AndroidManifest.xml. Place this declaration inside the application node:
  1. Register the Receiver listening for the boot complete event in the AndroidManifest.xml. Place this declaration inside the application node:
  1. Create the receiver class to listen for the boot complete event. This class must extend BroadcastReceiver abstract class. Its onReceive() method is called when the device boot is complete. For example, create a Java class called StartMyActivityAtBootReceiver.java and place it in the same package as the activity class to auto-start:

When this class receives an intent, it checks if it is the ACTION_BOOT_COMPLETE. If so, it creates a new activity intent and fills it with the activity class to be started. Finally, it executes the startActivity() method using the Android context and the activity intent.

Note «> Note Due to security reasons, Android does not auto-start any application until you manually launch it at least once. After that, the applications will automatically start on each Android boot.

Replace the default Android Home application

The home screen you see on your Android device after boot is a standard application that reacts to a home event. When Android finishes booting and is ready to start the home activity, the home event is sent and qualifying applications identify themselves as bootable candidates.

The system sends out the android.intent.category.HOME and android.intent.category.DEFAULT intents when it is done initializing.

Android looks for application manifests with these intent filters when it starts up. If there is more than one, Android lists all of them and allows you to select the one to launch.

In order to designate your application as a home application, follow these steps:

  1. Add the intent filters to AndroidManifest.xml. Copy these two lines into the intent filter of your application main activity:

Your main activity definition should look similar to the following:

  1. Install your application in the device. On the next startup, Android displays a dialog box that allows you to choose between the default Android launcher and the application you just modified:

Note «> Note You can set your selection as the default home application for the future.

Replace default Home application with a custom application in sources

The Replacing the default Android Home procedure is only valid for already-deployed Android systems. If you want to deploy an Android system with a custom home application already designated, you must make additional changes to the Android BSP sources:

  1. Create a custom home application and include it in the Android BSP sources. You can directly include the application source code or a pre-compiled version of it.
Читайте также:  Кеш для doom андроид

Note «> Note Verify that your custom Android home application includes the android.intent.category.HOME and android.intent.category.DEFAULT intent filters in the application manifest file.

Force your application to override the default launcher applications. Add the following entry in your application’s Android.mk file just before the include $(BUILD_PACKAGE) line:

Your application’s Android.mk file should look similar to the following:

  1. Include your application in the Android firmware build. Add your application’s module name «MyApplication» (as defined in the LOCAL_PACKAGE_NAME of your Application’s Android.mk file) to the list of packages of the firmware at device/digi/imx6_ccimx6_sbc/imx6_ccimx6_sbc.mk:
  1. Build the Android firmware. Issue this command sequence in the root folder of the Android sources.
    1. Clean the artifacts from the previous build:

      is the number of cores you want to use for the build process.

      1. The resulting firmware will boot your custom Android home application by default.

      В© 2019 Digi International Inc. All rights reserved.
      Auto-start custom Android applications updated on 17 April 2018 10:37:51 PM

      Источник

      Android. Автозапуск приложения при загрузке: теория и практика

      1. Теория

      Взглянув на примеры из официального источника (например, этот и этот) и изучив рекомендации на сайте stackoverflow.com, можно выделить следующие правила:

        В манифесте в элементе «manifest» указать разрешение:

      В манифесте в элементе «application» зарегистрировать ваш ресивер на прием сообщения ACTION_BOOT_COMPLETED:

      Используйте правильное полное или относительное имя класса вашего broadcast-ресивера. В описании ресивера без необходимости не указывайте атрибуты «enabled», «exported» и т.д. Вполне достаточно настроек и атрибутов по умолчанию.

      Код вашего broadcast-ресивера:

      Если ваш ресивер используется только для сообщения ACTION_BOOT_COMPLETED, то проверка «if» не обязательна. Однако иногда разработчики используют один и тот же ресивер для разных сообщений. В этом случае фильтруйте сообщения, проверяя их внутри метода onReceive.

      Приложение должно быть установлено на внутреннюю память. ОС Android устроена таким образом, что сообщение ACTION_BOOT_COMPLETED отправляется приложениям перед монтированием внешний памяти. Поэтому приложения, установленные на внешней памяти, никогда не получат это сообщение. Чтобы указать системе не устанавливать приложение на внешнюю память, в манифесте НЕ нужно прописывать для атрибута «@android:installLocation» значения «auto» или «preferExternal». По умолчанию, т.е. если этот атрибут не указан, ОС установит ваше приложение только на внутреннюю память. Однако согласно официальной документации лучше явно указать значение «internalOnly», чтобы у вас и других разработчиков не возникло искушение в будущем указать иное значение.

      После установки или принудительной остановки (force stop) приложение должно быть запущено хотя бы один раз, чтобы система «запомнила» это приложение для отправки ему сообщения ACTION_BOOT_COMPLETED. Такое поведение было реализовано в версии Android 3.1 в целях безопасности. В чем суть? Все только что установленные приложения находятся в состоянии «stopped» (не путать с активити, т.к. ОС управляет этим состоянием у приложений и активити по-разному). В это же состояние приложение «уходит», когда пользователь в настройках телефона принудительно его останавливает. Пока приложение находится в таком состоянии, оно не будет запущено системой ни по какой причине (например, через ACTION_BOOT_COMPLETED), исключая, конечно же, запуск самим пользователем. Благодаря такому нововведению немалая часть«вирусни и троянцев» перестала работать, т.к. уже нет возможности запуститься автоматом после установки.

      Исключение составляют системные приложения: см. замечание пользователя kolipass.

      Особенности режима Fast boot в HTC-устройствах. Известно, что HTC-устройства не перезагружаются в классическом смысле, а используют так наз. режим Fast boot (это одна из форм гибернации), сохраняя состояние ОС на диск. Поэтому сообщение ACTION_BOOT_COMPLETED не отправляется системой, т.к. в действительности перезагрузка не происходит (см. здесь). Вместо ACTION_BOOT_COMPLETED система может отправить следующие сообщения:

      В вашем приложении укажите в теге «receiver» кроме ACTION_BOOT_COMPLETED также вышеуказанные сообщения. Кроме этого необходимо прописать разрешение в дополнение к п.1:

      2. Практика: ошибки и особенности эксплуатации

      Разберем ошибки, которые совершают новички при настройке приложения и в коде.

        После установки или force stop приложение ни разу не запускалось (см. п.1.5).

      Приложение установлено не на внутренней памяти, или пользователь вручную перенес его на внешнюю память (см. п. 1.4).

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

      Также некоторые разработчики, отлаживая приложение, в logcat не видели своих сообщений из ресивера. Используйте Toast для отладки:

      Опечатки или несуществующие сообщения внутри тега ресивера:

      Неправильное положение элементов в манифесте приложения:

      • «uses-permission» должен быть указан только как прямой потомок элемента «manifest», не нужно его указывать/дублировать в теге «receiver»;
      • тег «receiver» должен быть указан только как прямой потомок элемента «application».

    2. Различные диспетчеры задач, оптимизаторы, приложения безопасности, Startup-менеджеры и т.п. могут отслеживать регистрацию приложения для приема ACTION_BOOT_COMPLETED и запрещать/разрешать его получение при загрузке. Удалите эти приложения или добавьте в исключение вашу программу в их настройках.

      Как было указано выше, некоторые устройства используют режим Fast boot. Можно попробовать в настройках телефона отключить этот режим или учесть п. 1.6.

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

      Не ошибки, но все же: указаны лишние, не обязательные атрибуты в теге «receiver», например («uses-permission», «enabled», «exported»):

      3. Отладка ресивера в эмуляторе и на реальных устройствах.

        В терминале выполните:

      Далее, чтобы отправить ACTION_BOOT_COMPLETED всем приложениям, наберите в терминале:

      Или для отправки ACTION_BOOT_COMPLETED конкретному приложению наберите в терминале:

      В эмуляторе: установите ваше ПО, запустив его из студии. При этом студия соберет ваш проект, установит приложение и запустит его. После этого закройте эмулятор (это аналогично выключению на реальном устройстве). Чтобы получить сообщение ACTION_BOOT_COMPLETED, запустите эмулятор из AVD-менеджера, а не с помощью кнопки «Run app» в тулбаре студии.

      После запуска эмулятора во вкладке Android Monitor укажите запущенный эмулятор и ваше приложение, чтобы просмотреть логи logcat.

      Итоги

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

      Код ресивера, как правило, будет таким:

      Надеюсь, эта статья поможет новичкам побороть «коварного врага» под названием «ACTION_BOOT_COMPLETED».

      Источник

      Автозапуск программ на Android: что это, как работает и как настроить

      Автозапуск приложений — это процесс, сопровождающийся самопроизвольной загрузкой какого-либо приложения, либо одной из его частей для выполнения задач в фоновом режиме. Фоновый режим же — это активная работа процесса в закрытом состоянии. То есть, даже если вы не используете программу, она работает. Большинство программ сейчас работает в Android по такому принципу.

      Чтобы было ещё понятнее, приведем пример из жизни. Например, любой знакомый вам мессенджер или клиент социальной сети может работать в фоновом режиме, регулярно проверяя наличие новых сообщений, ответов, лайков, постов и так далее. Даже если у вас будет закрыт мессенджер или клиент, вы сможете получить уведомление о том, что пришло новое сообщение. Для того чтобы клиент или мессенджер смог узнать о полученном уведомлении, ему приходится работать в фоновом режиме, постоянно проверяя наличие этих самых сообщений. Даже если экран смартфона будет выключен, а все процессы из недавно запущенных закрыты — мессенджер или клиент будет работать.

      Из статьи вы узнаете

      Какие программы работают в фоновом режиме?

      Всего есть два типа приложений, работающих в фоновом режиме, а именно:

      1. С автозапуском;
      2. С активной работой в фоне.

      Приложения с автозапуском. Активируются вместе с системой и работают в фоновом режиме всегда. К таким программам можно отнести клиенты, мессенджеры, утилиты для отображения погоды, лаунчеры, виджеты и так далее. Они никогда не выключаются и остаются в фоновом режиме.

      Приложения с активной работой в фоне. Это программы, которые находятся в данном режиме только при активной работе. Например, вы начали установку любимой игры из Google Play. Сервис будет загружать файл, даже если вы в этот момент занимаетесь другими процессами на телефоне. Как только игра будет уставлена, Play Market сам выгрузится из фонового режима и не будет там появляться, пока пользователь снова не попытается что-то скачать/переустановить/обновить. К таким приложениям относятся плееры, загрузчики, торренты, браузеры и так далее.

      Какие последствия от приложений, постоянно работающих в фоновом режиме?

      Если у вас будет работать несколько программ в таком режиме, то это нормально. При этом вполне допустимая практика, что запущены именно те процессы, которые, казалось бы, не нужны сейчас вовсе. Например, не стоит выгружать браузер из оперативной памяти, так как он не создает высокой нагрузки на систему, но при этом каждый его запуск не будет «забивать» процессор, а лишь выгрузится из оперативной памяти. Также не стоит убирать из автозапуска сервисы Google, приложения-лаунчеры, виджеты, мессенджеры и прочие программы с push уведомлениями.

      Количество процессов, допустимых для работы в фоновом режиме, вычисляется непосредственно из количества оперативной памяти и их «прожорливости». Например, если у вас 4GB оперативной памяти, для вас вполне нормальным будет загрузка её на 1GB. Если же будет свободен только 1GB, то, однозначно, стоит выключить несколько программ из автозагрузки.

      Чтобы вычислить норму для вашего аппарата, воспользуйтесь простой формулой: посмотрите сколько у вас приложений работает в фоновом режиме. Все эти утилиты показаны в настройках, в разделе «Память» и отображаются как работающие процессы. Если их много, но все они занимают где-то 10-40 MB, то большого вреда они не нанесут. Зачастую такие приложения висят в автозапуске для более быстрого старта, для поиска обновлений, отправки анонимной статистики, попытке получить новые уведомления и так далее.

      Если в фоне висит приложение, которое очень часто используется, и оно занимает мизерное количество оперативной памяти – не трогайте его. Но если очень редко его запускаете, а оно все равно висит в активных задачах – смело отключайте.

      Особое внимание обратите на программы, занимающие от 10% оперативной памяти. Их стоит по максимуму отключать. Но если среди них есть необходимые вам мессенджеры, сервисы Google и прочие важные процессы, то их лучше оставить. Аналогия проста: если часто пользуетесь утилитой или программой, то не стоит их отключать. Вполне нормально, когда в фоне работает около 10 приложений, из которых 5 вовсе не используется так часто.

      Как отключить приложение из автозапуска?

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

      Инструкция для Android 8, 9, 10 и выше

      1. Зайдите в «Настройки» смартфона и найдите пункт «Приложения и уведомления», откройте его.

      Откройте список всех приложений, кликнув по вкладке «Сведения о приложениях».

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

      Открыв программу, в ней кликните по вкладке «Батарея».

      В пункте «Батарея» найдите ползунок «Работа в фоновом режиме» и выключите его. Также рекомендуем перейти в пункт «Батарея» и установить статус приложения на «Экономить заряд батареи».

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

    Андроид – продуманная операционная система, поэтому она сама распознает процессы и программы, которые могут работать в фоне и позволяет отключать это. А если приложение не может работать в данном режиме и автоматически запускаться, этого ползунка не будет предусмотрено изначально.

    Инструкция для Android 7 и ниже

    Если у вас более старая версия, то вам стоит выполнить ряд следующих действий. Они также могут быть полезны и для Android Oreo версий:

      Зайдите в «Настройки» смартфона и найдите пункт «О телефоне» или «Система» в самом низу списка.

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

    В этом пункте найдите вкладку «Неактивные приложения» и через нее легко отключайте активные процессы.

Использование All-In-One Toolbox

Это многофункциональное приложение, основная задача которого — оптимизация работы операционной системы Андроид. Среди доступных инструментов предоставляется возможность остановить автозагрузку некоторых системных и большинства пользовательских приложений.

    Установите All-In-One Toolbox из официального магазина с помощью представленной ниже кнопки.

Источник

Читайте также:  Magic ball для андроида
Оцените статью