Если вы не измените один каркас Codename (или в частности его Android реализации), существует не так много вы можете сделать, чтобы получить onNewIntent()
обратного вызова. Текущая реализация LifecycleListener
не поддерживает метод жизненного цикла onNewIntent()
. Кроме того, единственное, что Codename один делает, когда onNewIntent()
обратного вызова срабатывает, чтобы сохранить новое намерение в качестве текущего умысла деятельности (см CodenameOneActivity.java:367):
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
Так что, если вам нужно, чтобы получить уведомление, когда onNewIntent()
пожары, единственный путь должен был изменить структуру Codename One.
Однако есть что-то, что вы можете сделать: вместо этого используйте метод жизненного цикла onResume()
. Этот метод гарантированно будет вызываться после onNewIntent()
, и поскольку намерение текущей активности обновляется с использованием setIntent(...)
, вы можете получить это намерение после того, как ваше приложение будет уведомлено о onResume()
.
Вы бы сначала создать объект lifecylce слушателя и зарегистрировать его с помощью AndroidNativeUtil
класса:
LifecycleListener listener = new LifecycleListener() {
public void onCreate(Bundle savedInstanceState) {}
public void onPause() {}
public void onDestroy() {}
public void onSaveInstanceState(Bundle b) {}
public void onLowMemory() {}
public void onResume() {
// this is where you get notified about onResume()
}
};
AndroidNativeUtil.addLifecycleListener(listener);
Вы бы затем восстановить намерение в onResume
слушателя:
public void onResume() {
Activity myActivity = AndroidNativeUtil.getActivity();
Intent potentialNfcIntent = myActivity.getIntent();
// do something with the intent if its an NFC intent
}
Так как invokeation onNewIntent()
не является единственной причиной, почему onResume()
может быть вызван (на самом деле есть много других причин, которые могут произойти), возможно, вам захочется реализовать некоторую проверку того, что вы обрабатываете это конкретное намерение только один раз.
Вы очень близки к тому, что я имею в виду. Моя проблема в том, что когда я получаю доступ к родной части Android, я думаю, что Codename One доступ через основное действие, но у меня нет доступа к его модификации и переопределению. Я нашел класс AndroidUtilNative.addLifecycleListener, возможно, это то, что я ищу. – Giuliano