#java #android #delphi #firemonkey
#java #Android #delphi #firemonkey
Вопрос:
Мне нужно реализовать эту функцию :
[JavaSignature('android/app/Activity')]
JActivity = interface(JContextThemeWrapper)
...
procedure onRequestPermissionsResult(requestCode: Integer; permissions: TJavaObjectArray<JString>; grantResults: TJavaArray<Integer>); cdecl;
....
но как это сделать? эта функция предназначена только для получения события, поэтому я должен переопределить ее, но я понятия не имею, как это сделать.
Комментарии:
1. Вы задаете неправильный вопрос. Тема вашего вопроса вводит в заблуждение. Реализация функций событий в Android выполняется путем использования версии Delphi опубликованного интерфейса прослушивателя и реализации в классе Delphi, который наследуется от
TJavaLocal
в Androidapi. Модуль JNIBridge. Вы спрашиваете, как реализовать обратный вызов вActivity
том, что лежит в основе всего вашего приложения Delphi.2. спасибо, Блонг, вы правы, я только что обновил вопрос, чтобы быть более точным 🙂
Ответ №1:
Чтобы реализовать обратный вызов в Activity
том, что лежит в основе вашего приложения FireMonkey, вы должны написать некоторый Java-код для подкласса собственного собственного подкласса activity FireMonkey.
Это довольно утомительно и чревато проблемами и требует различных «обезьяньих дел» командной строки, но я написал процесс для другого обратного onNewIntent
вызова в моей статье Delphi XE7 о поддержке тегов NFC (Delphi 10 Seattle сделал эту работу выполнимой без подклассов Java activity). Я также написал процесс для Delphi XE5 для onActivityResult
обратного вызова в первой версии моей статьи о запуске действий Android (Delphi XE6 сделал эту работу возможной без подклассов Java activity).
Обязательно обновите файл шаблона манифеста Android, как это сделано с примерами, которые сопровождают эти статьи, чтобы ссылаться на новый пользовательский подкласс activity, как в:
<activity android:name="com.blong.test.NativeActivitySubclass"
...
Удачи с этим. Это довольно запутанно и очень затрудняет отладку.
Комментарии:
1. Спасибо, блонг, я уже прочитал весь ваш блог и смотрю ваш семинар 🙂 благодаря этому я уже создал свои собственные classes.dex. Я понимаю, как подклассировать любой объект, например, textview, но я не понимаю, как подклассировать FMXNativeActivity, потому что его создаст delphi, а не я, поэтому он никогда не будет создан с моим собственным подклассом (или я что-то пропустил). Эта часть, которую я не совсем хорошо понял в вашем блоге, как начать основное действие с моего собственного подкласса вместо FMXNativeActivity по умолчанию (потому что иначе мой Java-код будет бесполезен, я думаю)
2. Хорошо, если вы уже знакомы с материалом и процессами, тогда у вас есть вся необходимая информация. Эти две статьи охватывают все необходимые шаги (для рассматриваемых версий продукта) и сопровождаются примерами, показывающими, что результаты работают хорошо. Если там что-то неясно, вам нужно быть более конкретным в вопросах, которые вы задаете, или в проблемах, о которых вы сообщаете.
3. «я не понимаю, как подклассировать FMXNativeActivity, потому что это будет delphi, который создаст его, а не я» -> О, на самом деле я вижу одну вещь, которая не подчеркивается в статьях, — это изменение, необходимое для файла манифеста Android, чтобы создать подкласс activity при запуске приложения. Я соответствующим образом обновил свой ответ. Если вы обнаружите, что this now отвечает на проблему, пожалуйста, сделайте соответствующее голосование за полезные комментарии и отметьте соответствующие ответы (здесь и на другие недавние вопросы).
4. Спасибо, блонг! теперь это работает отлично!! Я также добавляю запрос функции в emb ( quality.embarcadero.com/browse/RSP-15986 ) потому что я думаю, что в будущем было бы лучше, если бы все это обрабатывалось непосредственно delphi
5. @DaveNottage, ничего специфичного для NFC, нет. Я имею в виду сбор намерений в Delphi из метода базового activity
onNewIntent
, который в Сиэтле добавляет функциональность к коду surface в Delphi без необходимости грязного свертывания рукава. В статье NFC показан пример этого, но, опять же, это пример из Сиэтла — посмотрите на HTML-файл ReadMe. Это похоже на поддержку XE6 дляonActivityResult
(также появилась в платформе обмена сообщениями).