2016-09-14 2 views
1

Ниже приведены фрагменты ниже, когда действие находится на переднем плане. Однако MainActivity не сможет принять трансляцию, когда MainActivity находится в фоновом режиме.Как отправить данные из IntentService в приостановленную активность?

Как я могу убедиться, что MainActivity всегда будет получать трансляцию? Есть ли другой способ отправить данные из IntentService в приостановленную деятельность?

В моей IntentService, я посылаю данные обратно MainActivity как этот

Intent intent = new Intent(); 
intent.setAction(MY_SERVICE_RESULT); 
intent.putExtra(MY_SERVICE_VALUE, "hello from service"); 
LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 

В моей деятельности, я использую BroadcastReceiver как этот

public class MainActivity extends AppCompatActivity{ 

    BroadcastReceiver receiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    receiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     String value = intent.getStringExtra(MY_SERVICE_VALUE); 
     } 
    }; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(MY_SERVICE_RESULT); 
     LocalBroadcastManager.getInstance(this).registerReceiver(receiver, intentFilter); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); 
    } 
    } 
} 
+0

Вы можете сделать это с помощью ** BroadCastReceiver ** или может быть ** Callback ** тоже. –

+0

@RahulSharma, я уже пользуюсь BroadcastReceiver. Как использовать обратный вызов? Любой пример? –

+0

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

ответ

0

Как я могу убедиться, что MainActivity всегда будет получать трансляцию?

Вы не можете.

Однако вы можете обойти его, сохранив данные, которые IntentService хочет отправить в MainActivity где-то временно (например, SharedPreferences), а MainActivity проверяет это хранилище в onResume.

Возможный сценарий
IntentService делает свою работу. Проверяет, активна ли MainActivity *. Если это -> отправить широковещательную рассылку. Если он не ... хранится где-то и пусть MainActivity проверяет это хранилище в onResume.

* вы можете использовать вызовы lifecyclecallbacks приложения для контроля состояния активности, чтобы узнать, работает ли работа и если да, какой из них.

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