voytalexey Опубликовано 21 декабря, 2014 Поделиться Опубликовано 21 декабря, 2014 Есть два приложения, условно назовём главное и плагин. Главное создает объект JIntent после чего запускает плагин через вызов startActivity(Intent). Как мне в плагине получить доступ к этому передаваемому Intent? Использую Delphi XE6. Цитата Ссылка на комментарий
0 voytalexey Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 Заголовок топика должен звучать так: "Как в вызываемом приложении получить доступ к объекту JIntent?" К сожалению, на этом форуме редактировать содержание поста можно, а вот его заголовок нет. Теперь ответ на вопрос. Доступ есть через SharedActivity.getIntent (надо подключить модули FMX.Helpers.Android и Androidapi.JNI.GraphicsContentViewText). Для возврата информации в вызывающее приложение использовал SharedActivity.setResult(TJActivity.JavaClass.RESULT_OK, SharedActivity.getIntent); SharedActivity.finish(); Для того чтоб в главном приложении получить результат, надо перед вызовом подписаться на сообщение (в XE6): Intent := TJIntent.Create; Intent.setClassName(StringToJString('com.MySoft.PluginOne'),StringToJString('com.embarcadero.firemonkey.FMXNativeActivity')); // наполняем данные для передачи в плагин intent.putExtra(StringToJString('dbl'),123.456); intent.putExtra(StringToJString('str'),StringToJString('qwerty')); // подписываемся на сообщение, колл-бек метод "HandleActivityMessage" FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification,HandleActivityMessage); // стартуем плагин SharedActivity.startActivityForResult(Intent,0); Получение результата в вызывающем приложении делается в колл-бек методе, я делал так: procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage); var RequestCode, ResultCode: Integer; Intent: JIntent; d:double; s:string; begin if not(M is TMessageResultNotification) then exit; TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, FMessageSubscriptionID); FMessageSubscriptionID := 0; RequestCode:=TMessageResultNotification(M).RequestCode; ResultCode:=TMessageResultNotification(M).ResultCode; Intent:=TMessageResultNotification(M).Value; if ResultCode = TJActivity.JavaClass.RESULT_OK then begin Memo1.Lines.Append('RESULT_OK'); if Assigned(Intent) then begin d:=Intent.getDoubleExtra(StringToJString('dbl'),111.111); s:=JStringToString(Intent.getStringExtra(StringToJString('str'))); Memo1.Lines.Append('d='+FloatToStr(d)); Memo1.Lines.Append('s='+s); end; end else if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then begin Memo1.Lines.Append('RESULT_CANCELED'); end; end; Проверено в ХЕ6, идеи почерпнуты из следующих источников: http://vlad8.com/tech/android-intents-tutorial/http://www.darkraha.com/rus/mobile/android/api/intent.phphttp://www.blong.com/Articles/DelphiXE6AndroidActivityResult/ActivityResult.htm в последней ссылке есть описание как решать эту проблему в ХЕ5, есть отличия. zairkz 1 Цитата Ссылка на комментарий
Вопрос
voytalexey
Есть два приложения, условно назовём главное и плагин. Главное создает объект JIntent после чего запускает плагин через вызов startActivity(Intent). Как мне в плагине получить доступ к этому передаваемому Intent? Использую Delphi XE6.
Ссылка на комментарий
1 ответ на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.