delphi / firemonkey: как реализовать обратный вызов в Activity?

#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 (также появилась в платформе обмена сообщениями).