2

У меня есть приложение для будильника, которое использует диспетчер аварийных сигналов и широковещательный приемник. Приложение представляет собой одно действие и 4 фрагмента. Когда сигнал тревоги отключается, метод onReceive отправляет намерение в основное действие, основное действие получает это намерение в методе onNewIntent, а затем переходит к правильному фрагменту. Все работает нормально, за исключением случаев, когда будильник отключается после закрытия приложения.onNewIntent не вызван при перезагрузке

После того, как я уничтожаю приложение, сигнал тревоги по-прежнему отключается, и намерение от широковещательного приемника срабатывает, но метод onNewIntent действительно улавливает намерение и перемещает приложение в правильный фрагмент.

Вот Intent, который находится в классе приемника широковещательной передачи, который перемещается к основному виду деятельности

Intent alarmIntent = new Intent(context, ClockActivity.class); 
       alarmIntent.addFlags(Intent.FLAG_FROM_BACKGROUND); 
       alarmIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
       alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       alarmIntent.putExtra("Alarm Name", receivedAlarm.getmName()); 
       context.startActivity(alarmIntent); 

Вот мой метод onNewIntent в моей основной деятельности, не вызывался, когда сигнал тревоги вызывается, когда приложение закрыто.

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    PhraseFragment phraseFragment = new PhraseFragment(); 

    String activeName = intent.getStringExtra("Alarm Name"); 

    Bundle args = new Bundle(); 
    args.putString("activeName", activeName); 
    phraseFragment.setArguments(args); 

    getFragmentManager().beginTransaction() 
      .replace(R.id.container, phraseFragment) 
      .addToBackStack("phrase") 
      .commit(); 

} 
+0

http://stackoverflow.com/questions/8800006/onnewintent-is-not-called-in-android-tabs – grebulon

ответ

0

Его немного поздно, но, возможно, это может помочь кому-то.

Как я вижу, onNewIntent вызывается, когда активность открывается на фоне. Когда вы отправляете намерение на активность, которая не работает на фоне, вы можете получить ее через getIntent on onResume().

Я бы поменял ваш код на следующее.

@Override 
protected void onResume() { 
    super.onResume(); 

    Intent intent = getIntent(); 
    String activeName = intent.getStringExtra("Alarm Name"); 

    if (activeName != null){ 
     PhraseFragment phraseFragment = new PhraseFragment(); 

     Bundle args = new Bundle(); 
     args.putString("activeName", activeName); 
     phraseFragment.setArguments(args); 

     getFragmentManager().beginTransaction() 
       .replace(R.id.container, phraseFragment) 
       .addToBackStack("phrase") 
       .commit(); 
    } 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    setIntent(intent); 
} 

В этом случае вам нужно проверить, если вы намерены получить в onResume() содержит данные, которые вы требуете.

Заметим, что в документации я не нашел ссылки на это. Его просто вывод, который я получил, экспериментируя.

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