Уже давно в Windows есть функция QueryPerformanceCounter.
Аналогичные вашему вопросы решались тут:
http://delphikingdom.com/asp/answer.asp?IDAnswer=63327
http://delphikingdom.com/asp/answer.asp?IDAnswer=67074
http://delphikingdom.com/asp/answer.asp?IDAnswer=62538
Одним вызовом передать два Intent-а? Никак, ибо функции типа startActivity() принимают только один экземпляр.
Зато в один Intent можно напихать довольно много разнородной информации используя разнообразные Exstra.
Заголовок топика должен звучать так:
"Как в вызываемом приложении получить доступ к объекту 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.php http://www.blong.com/Articles/DelphiXE6AndroidActivityResult/ActivityResult.htm
в последней ссылке есть описание как решать эту проблему в ХЕ5, есть отличия.