Программируем под Android, добавление приложения в автозагрузку
Помните писали приложение, которое сохраняло нашу батарею? Думаю, оно поможет вам. Но пока оно не очень удобно, потому что его надо запускать вручную, но мы же это не очень хотим. Давайте сделаем, чтобы оно само запускалось.
В первую очередь, пропишем в AndroidManifest.xml права:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Оно позволяет получать сообщения ACTION_BOOT_COMPLETED, которые в свою очередь говорят, что загрузка системы закончена.
Для этого в манифесте регистрируем новый Ресивер.
Ресивер служит для получения Широковещательных сообщений
Внутри <application>
добавим следующий код:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
android:name
указываем название класса-ресивера.
В <intent-filter>
фильтр намерений объявляет возможности его родительского компонента.
<action android:name="android.intent.action.BOOT_COMPLETED" />
- указываем, что надо получать сообщения.
android.intent.category.DEFAULT - устанавливает компонент, как обработчик по умолчанию для данного намерения.
Далее создаём Broadcast Receiver. В Android Studio делается так:
В списке файлов проекта app/java/{package}/ правая кнопка мыши - New - Other - Broadcast Receiver.
Откроется окно:
и жмём Finish.
Здесь будем реализовывать то, что будет происходить при запуске аппарата внутри приложения.
Реализация кода будет происходить в методе класса onReceive.
Код, который я разместил внутри, давайте разберём его.
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Toast toast = Toast.makeText(context.getApplicationContext(),
"Робит", Toast.LENGTH_LONG);
toast.show();
Log.d("myapp", "Робит");
Intent intents = new Intent(context.getApplicationContext(), MainActivity.class);
intents.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intents);
}
Условие нам нужно, если бы будем получать не только сообщения Action_boot_completed.
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
Toast мы уже реализовывали и разбирали.
Log пишем в лог, что запустилось. "myapp" - вам поможет отфильтровать логи и найти нужный. "Робит" - указывает сообщение лога.
Itent указываем какой Активити вызвать.
addFlags - добавляет флаги, влияющие на работу Activity. Флаг FLAG_ACTIVITY_NEW_TASK означает, согласно документации, что действие станет началом новой задачи в этом стеке истории.
Список всех флагов на русском здесь.
Вот так просто заставить приложение автоматически запускаться. Далее реализуем Сервисы.
Материал подготовлен автором @zheev
Фото взято с сайта android-indonesia.com