[broadcastreceiver] Автозапуск Приложения После Перезагрузки Ос

  • Автор темы Автор темы Lomanu4
  • Дата начала Дата начала

Lomanu4

Команда форума
Администратор
Ofline
Начнём с плана:

  1. Нам необходим java-класс, наследник от BroadcastReceiver, который, собственно и будет запускать наше приложение
  2. Файл classes.dex, склеенный с нашим java-классом
  3. Ну и само приложение, которые мы хотим запускать после перезагрузки системы


Ничего особо сложного в нём нет. Класс можно написать в Android Studio, в любом блокноте (например: Notepad ++) или вообще просто скопировав код ниже и вставив его опять же через блокнот, этот вопрос уже сами решайте 🙂
Я опишу пример, где класс создаём через Notepad ++.
Для начала создадим структуру папок:

  • В папке «ReceiverProject» будем хранить наш проект.
  • В папке «ReceiverProject\java\src\com\TestReceiver\» будет наш класс, назовём его «BootCompletedReceiver», т.е. там будет лежать файл «BootCompletedReceiver.java».
Код:
package com.TestReceiver;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
 
public class BootCompletedReceiver extends BroadcastReceiver {
 
 public void onReceive(Context context, Intent intent) {
 
  if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
   Intent TestLauncher = new Intent();
            TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity");
   TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   context.startActivity(TestLauncher);
  }
 
 }
 
}
Описание кода.
Определяем имя пакета (оно совпадает с частью пути, по которому хранится файл), подключаем модули.
Наследуемся от BroadcastReceiver, определяем метод onReceive, в нём проверяем, если пришло сообщение о завершении загрузки системы, то создаём Интент, прописываем имя класса приложения (в FMX – это всегда «com.embarcadero.firemonkey.FMXNativeActivity»), устанавливаем флаг на запуск Активити в новом таске, ну и стартуем активити (метод startActivity), передав Интент.
Как-то так… 🙂 Важно, также, заметить, что для «ACTION_BOOT_COMPLETED» требуется выдать разрешение «RECEIVE_BOOT_COMPLETED» в манифесте приложения, но об этом позже.

  • В «Uses Prmissions» выдаём разрешение «Receive boot complited».
  • В Deployment Manager снимаем галочку с файла (по умолчанию) «classes.dex», добавляем туда наш файл из папки «ReceiverProject\java\output\dex», прописываем у него путь (Remote Path) «classes\».
  • В Project Manager жмём Build, это необходимо, чтобы среда создала файл «AndroidManifest.template.xml» в корне проекта.
Открываем файл «AndroidManifest.template.xml», находим строчку «<%receivers%>» и после неё пишем
Код:
<receiver android:name="com.TestReceiver.BootCompletedReceiver"
 
                  android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
 
                  android:enabled="true">
 
            <intent-filter>
 
                <action android:name="android.intent.action.BOOT_COMPLETED" />
 
                <category android:name="android.intent.category.DEFAULT" />
 
            </intent-filter>
 
        </receiver>
В первой строчке мы указываем имя нашего ресейвера, «com.TestReceiver» - имя пакета, «BootCompletedReceiver» - название нашего класса.

Важные замечания.
  • Проверяйте Deployment Manager, среда иногда ставит обратно галочку на стандартном classes.dex.
  • Чтобы приложение подписалось на события системы, его необходимо один раз запустить.
Сохраняем файл и запускаем компиляцию проекта.
 
Назад
Сверху Снизу