Евгений Корепов Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 (изменено) Пытаюсь сделать автозагрузку приложения в андроид, но не выходит каменная чаша. Приложение пустое. Даю права на "Receive boot completed", в манифесте делаю следующие изменения (выделил комментариями с "*******"): <?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%"> <%application-meta-data%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <%activity%> <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" /> <!-- *********************************************************************** --> <receiver android:name=".BootReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <!-- *********************************************************************** --> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) --> При включении телефона получаю ошибку "В приложении Таком-то произошла ошибка". До TForm.onCreate точно не доходит. Что я делаю не так? Помогите пожалуйста. Изменено 20 июля, 2015 пользователем Евгений Корепов Цитата Ссылка на комментарий
0 haword Опубликовано 20 июля, 2015 Поделиться Опубликовано 20 июля, 2015 ну вообще то надо задать java класс а указано - .BootReceiver Евгений Корепов, Brovin Yaroslav и Kitty 3 Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 20 июля, 2015 Администраторы Поделиться Опубликовано 20 июля, 2015 Haword прав. Обратите ваше внимание на строчку в манифесте: <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" /> Это аналогичный вашему ресивер. name указывает, что ресивер FMXNotificationAlarm находится в пакетах: "com.embarcadero.firemonkey.notifications". Евгений Корепов 1 Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 20 июля, 2015 Модераторы Поделиться Опубликовано 20 июля, 2015 Да-да. Пишите java-класс с событием onReceive, в котором пишем код, запускающий приложение. В манифесте подписываемся на сообщения системы, указывая имя java-класса . Работает так: 1) Система запустилась и послала всем подписанным приложениям сообщение об окончании запуска 2) Ваше приложение, а точнее класс который вы написали, с событием onReceive, получает сообщение и запускает ваше приложение Евгений Корепов 1 Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 20 июля, 2015 Автор Поделиться Опубликовано 20 июля, 2015 Да-да. Пишите java-класс с событием onReceive, в котором пишем код, запускающий приложение. В манифесте подписываемся на сообщения системы, указывая имя java-класса . Работает так: 1) Система запустилась и послала всем подписанным приложениям сообщение об окончании запуска 2) Ваше приложение, а точнее класс который вы написали, с событием onReceive, получает сообщение и запускает ваше приложение Т.е. средствами Delphi это не сделать? Только отдельный класс на java и морока с модификацией classes.dex? Я надеялся что мне поможет компонент турецкого коллеги http://brsatalay.blogspot.com.tr/2014/10/delphi-android-broadcast-receiver.html . По крайней мере с другими броадкастами он отлично справляется. А почему тогда получаю ошибку "В приложении Таком-то произошла ошибка"? Или это просто симптом отсутствия обработчика BOOT_COMPLETED? Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 20 июля, 2015 Модераторы Поделиться Опубликовано 20 июля, 2015 Я, другого способа не знаю, может уже и есть, но мне на глаза не попадался, поэтому написал способ, который точно должен сработать. Про компонент: Ресейвер можно прописывать через манифест, а можно регистрировать во время работы приложения. Отличия в том: что через манифест ресейвер статичен, т.е. он всегда будет существовать и принимать сообщения, даже когда приложение закрыто а регистрация во время работы приложения, позволяет создать временный ресейвер, который будет работать, только если приложение уже запущено По поводу ошибки, точно не подскажу, возможно, это из-за того, что в манифесте указан не существующий java-класс. p.s. В XE7-XE8 задача склеивания с файлом classes.dex значительно упрощена. Полезные статьи: Как добавить jar библиотеку в проект (XE7-XE8) Как подключить и использовать свой JAVA-класс (общая инфа) Как создавать обёртки для JAVA-кода (ручной способ, ещё до появления утилиты) Евгений Корепов и aleksandrguru 2 Цитата Ссылка на комментарий
0 GydruS Опубликовано 8 октября, 2015 Поделиться Опубликовано 8 октября, 2015 Да-да. Пишите java-класс с событием onReceive, в котором пишем код, запускающий приложение. В манифесте подписываемся на сообщения системы, указывая имя java-класса .... Добрый день! А как правильно запустить свое Delphi-приложение из java-класса ресивера? Цитата Ссылка на комментарий
0 fsdb Опубликовано 17 января, 2016 Поделиться Опубликовано 17 января, 2016 (изменено) жаль что нет реализации без java, вроде обычная задача и в тоже время очень важная на мой взгляд в Delphi 10 не появилось иной реализации? Изменено 17 января, 2016 пользователем fsdb Цитата Ссылка на комментарий
0 Rusland Опубликовано 18 января, 2016 Поделиться Опубликовано 18 января, 2016 fsdb, вот в этой статьей довольно подробно описано как этой сделать... писать на java ничего особенного не придется. ToAll: Видел на stackoverflow писали что можно не заменять classes.dex, а создать новый dex и прикрепить его к проекту. Что изменить в bat-файле чтобы это сделать? Цитата Ссылка на комментарий
0 SVTX Опубликовано 15 ноября, 2021 Поделиться Опубликовано 15 ноября, 2021 В 18.01.2016 в 10:59, Rusland сказал: fsdb, вот в этой статьей довольно подробно описано как этой сделать... писать на java ничего особенного не придется. ToAll: Видел на stackoverflow писали что можно не заменять classes.dex, а создать новый dex и прикрепить его к проекту. Что изменить в bat-файле чтобы это сделать? Коллега можете скинуть ссылку на stackoverflow с этой статьей? Цитата Ссылка на комментарий
Вопрос
Евгений Корепов
Пытаюсь сделать автозагрузку приложения в андроид, но не выходит каменная чаша.
Приложение пустое. Даю права на "Receive boot completed", в манифесте делаю следующие изменения (выделил комментариями с "*******"):
При включении телефона получаю ошибку "В приложении Таком-то произошла ошибка". До TForm.onCreate точно не доходит.
Что я делаю не так? Помогите пожалуйста.
Изменено пользователем Евгений КореповСсылка на комментарий
9 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.