2015-05-12 2 views
0

Я работаю над проектом Android, который должен получить строку из другого приложения с помощью общей активности.SharedActivity.getIntent за пределами OnCreate

Если приложение неактивно, я могу получить информацию getIntent, будь то OnCreate или нажатие кнопки. Но когда приложение уже запущено и в фоновом режиме, если другое приложение отправляет другое намерение, я получаю то же намерение, что и в OnCreate, а не новое.

Благодаря


    Var 
    Intent: JIntent; 
    S: String; 
begin 

    Try 

    Intent := SharedActivity.getIntent; 


    if Intent Nil Then 
    Begin 

     if TJIntent.JavaClass.ACTION_SEND.equals(intent.getAction) Then 
     Begin 

     S := JStringToString(intent.getStringExtra(TJIntent.JavaClass.EXTRA_TEXT)); 

     End; 

    End; 

    Except 
    On E: Exception Do 
    ShowMessage(E.Message); 
    End; 

Remy,

Спасибо за ваш ответ.

Я пробовал все (думаю) и не мог заставить его работать. Вот что я сделал:

Я последовал за объяснение Брайана по письму, был построен новый файл .jar без NFC звонков и он не на старте, это бревно из DDMS:

05-13 11: 46: 49.101: E/AndroidRuntime (16597): java.lang.RuntimeException: невозможно выполнить операцию ComponentInfo {com.blong.IntentTest/com.blong.nfc.NativeActivitySubclass}: java.lang.ClassNotFoundException: не удалось найти класс "com.blong.nfc.NativeActivitySubclass" по пути: DexPathList [[zip-файл "/data/app/com.blong.IntentTest-1/base.apk"],nativeLibraryDirectories=[/data/ap р/com.blong.IntentTest-1/Библиотека/рука, /поставщик/Пб/система/Библиотека]]

Так что я rebuit .jar-файл из исходного файла .Java, который включает в себя NFC и это тоже не сработало. Когда приложение находится в фоновом режиме и запускается с новым намерением, приложение показывает черный экран и зависает, как только оно появляется, последнее, что нужно было прокомментировать все в процедуре onNewIntent, и результат был тем же - черный экран.

Тогда я понял, что приложение было запущено дважды, когда другое приложение отправило намерение, и оба экземпляра замерзают, см. Рисунок.

enter image description here

Я попытался также добавить SingleTop к launchmode, как предложено в CI_ пост - никакого успеха.

Как я могу сделать такую ​​простую работу?

Благодаря

+0

дайте нам мир кода, чтобы увидеть ваши звонки –

+0

Я задал аналогичный вопрос здесь http://stackoverflow.com/questions/28969169/receiving-consecutive-send-intents-brings-app-back-to- но не уверен, что он достаточно близок к дублированию. –

+0

@ci_ Как реализовать OnNewIntent()? – DanielH

ответ

1

Activity.getIntent() возвращает Intent, который запустил процесс вызова. Он не обновляется, если процесс получает новый Intent, хотя он уже запущен. Android имеет событие onNewIntent для этой цели, но, к сожалению, FireMonkey не раскрывает это событие.Однако, есть обходной путь, как описан в следующем блоге:

Using NFC in Delphi XE7 Android apps | Receiving new intents at runtime

шагов, необходимые для реагирования на новые намерения заключаются в следующем:

  • наследоваться от стандартного FireMonkey Java собственный класс активности в Java-коде (файл .java), реализующий метод onNewIntent(), который вызывает собственный метод, который мы будем реализовывать в Delphi
  • скомпилировать код Java в скомпилированный класс Java файл (.class-файл) с помощью javac.exe, ссылаясь на Embarcadero скомпилированные Java активность класса
  • добавить файл Java класса в архив Java (а .jar файл) с помощью jar.exe
  • добавить .jar файл проект Delphi
  • в коде Delphi объявить нативный метод JNI, который будет вызываться кодом Java
  • оркестрировать переключатель потоков из потока Java UI для FireMonkey потока, морфинг любого параметра JNI объектов в объекты оболочки моста Java в пути

В блоге подробно описывается каждый шаг, показывающий код Java и Delphi, необходимый для его реализации.

Смежные вопросы