2013-03-11 2 views
5

Внутри приемника вещания Я хочу начать свое приложение (Activity) и передать некоторые данные.Intent extras отсутствует при запуске активности

Моя проблема заключается в том, что дополнительные функции, похоже, не переносятся на активность. Я пытаюсь получить данные внутри функции onNewIntent(Intent i).

Любые идеи?

Вот моя текущая попытка в BroadcastReceiver:

Intent intSlider = new Intent(); 
intSlider.setClass(UAirship.shared().getApplicationContext(), SliderMenuActivity.class); 
intSlider.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

intSlider.putExtra("action", ScreensEnum.Object); 
intSlider.putExtra("objectId", objectId); 
intSlider.putExtra("objectCode", objectCode); 
intSlider.putExtra("userId", userId); 

UAirship.shared().getApplicationContext().startActivity(intSlider); 

EDIT - Добавлен код, используемый в onNewIntent() и OnCreate()

Следующий код прекрасно работает в onCreate() когда приложение не работает. Когда приложение уже работает, тот же код не работает (т. Е. Никаких дополнительных функций) из функции onNewIntent().

Intent intent = getIntent(); 

if(intent.hasExtra("objectId")) { 

    loadDetail(intent.getStringExtra("objectId"), "2w232"); 
} 
+0

называется 'onNewIntent' метод? Какой 'launchMode' вы указали для' SliderMenuActivity'? –

+0

Привет, да onNewIntent() вызывается. launchMode - singelTask. – conor

+0

Можете ли вы опубликовать свой метод 'onNewIntent'? –

ответ

0

Выдержка из документации

Это называется для деятельности, которые устанавливают launchMode к «SingleTop» в их упаковке, или если клиент использовал флаг FLAG_ACTIVITY_SINGLE_TOP при вызове startActivity (Intent). В любом случае, когда активность повторно запускается в верхней части стека действий вместо нового экземпляра запускающего действия, onNewIntent() будет называться в существующем экземпляре с намерением, который использовался для перезапуск это.

Активность всегда будет приостановлена ​​до получения нового намерения, поэтому вы можете рассчитывать на onResume(), вызываемый после этого метода.

Обратите внимание, что getIntent() все еще возвращает исходное намерение. Вы можете использовать setIntent (Intent), чтобы обновить его до этого нового намерения.

Я думаю, что в последнем абзаце объясняется ваша проблема.

+0

Ахмед, я не думаю, что вы поняли, как работают задачи и Back Back в Android, поэтому ваш ответ не совсем правильный. Читайте о том, как они работают здесь: http://developer.android.com/guide/components/tasks-and-back-stack.html –

+0

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

+0

Да. но это влияет на погоду, которую получает цель, не так ли? –

7

Проблема getIntent() способ. Он всегда возвращает намерение, что начал деятельность, а не последнее. Вы должны использовать намерение, которое было передано методу onNewIntent в качестве аргумента.

+1

То же самое, при отладке я проверял оба намерения. Они были пусты. – conor

+0

Хмм .. Я никогда не сталкивался с этой проблемой, и я не могу найти полезную информацию о google .. = ( –

-1

Вы можете сохранить последнее полученное намерение в переменной-члене (mLastIntent). Затем вы можете использовать этот элемент в методе onResume() для запроса дополнительных данных.

private Intent mLastIntent; 
@Override 
protected void onNewIntent(Intent intent) { 
    mLastIntent = intent; 
}; 
+0

, пожалуйста, добавьте теги. Вопрос не очень хорошо объяснен, и не ясно, что такое язык программирования. –

1

Вы должны установить флаг FLAG_ACTIVITY_SINGLE_TOP или установить launchMode SingleTop в файле манифеста.

Конечно, когда onNewIntent называется, вы не используете getIntent, а Intent, полученный как аргумент. onNewIntent вызывается, когда экземпляр активности уже существует. Например, если в последний раз вы нажали кнопку «Домашний экран».

Я написал решение, которое работало для меня здесь: Intent with old extra in onCreate() for singleTask Activity