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

Описание кода.
Определяем имя пакета (оно совпадает с частью пути, по которому хранится файл), подключаем модули.
Наследуемся от BroadcastReceiver, определяем метод onReceive, в нём проверяем, если пришло сообщение о завершении загрузки системы, то создаём Интент, прописываем имя класса приложения (в FMX – это всегда «com.embarcadero.firemonkey.FMXNativeActivity»), устанавливаем флаг на запуск Активити в новом таске, ну и стартуем активити (метод startActivity), передав Интент.
Как-то так… 🙂 Важно, также, заметить, что для «ACTION_BOOT_COMPLETED» требуется выдать разрешение «RECEIVE_BOOT_COMPLETED» в манифесте приложения, но об этом позже.
В первой строчке мы указываем имя нашего ресейвера, «com.TestReceiver» - имя пакета, «BootCompletedReceiver» - название нашего класса.
Важные замечания.
- Нам необходим java-класс, наследник от BroadcastReceiver, который, собственно и будет запускать наше приложение
- Файл classes.dex, склеенный с нашим java-классом
- Ну и само приложение, которые мы хотим запускать после перезагрузки системы
Ничего особо сложного в нём нет. Класс можно написать в 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» в корне проекта.
Код:
<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>
Важные замечания.
- Проверяйте Deployment Manager, среда иногда ставит обратно галочку на стандартном classes.dex.
- Чтобы приложение подписалось на события системы, его необходимо один раз запустить.