2016-09-14 6 views
1

以下のスニペットは、アクティビティがフォアグラウンドにあるときに機能します。ただし、MainActivityがバックグラウンドにある場合、MainActivityはブロードキャストの受信に失敗します。IntentServiceから一時停止したアクティビティにデータを送信するにはどうすればよいですか?

MainActivityが常にブロードキャストを受信するようにするにはどうすればよいですか? IntentServiceから一時停止したアクティビティにデータを送信する他の方法はありますか?私IntentServiceで

、私は私が確認してくださいどのようにこの

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 **を使用するか、**コールバック**を使用することもできます。 –

+0

@RahulSharma、私は既にBroadcastReceiverを使用しています。コールバックはどのように使用しますか?どんな例ですか? –

+0

これをアクティビティに実装し、サービスクラスコンストラクタのコールバックインスタンスをこのアクティビティクラスから渡します。サービスクラスでは、このコールバックを使用して、実装したこのアクティビティにデータを送信します。 –

答えて

0

ようにBroadcastReceiver使用しています、私の活動でこの

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

のようにバックMainActivityにデータを送信していますMainActivityは常にブロードキャストを受信しますか?

できません。

IntentServiceがMainActivityに送信したいデータ(たとえばSharedPreferences)を保存し、MainActivityでそのストレージをonResumeにチェックインさせることで回避できます。

考えられるシナリオ
IntentServiceはそのことを行います。 MainActivityがアクティブかどうかをチェックします*。それがあれば - >放送を送ってください。そうでなければ - >どこかに格納して、MainActivityにそのストレージをonResumeでチェックさせます。

*アプリケーションのライフサイクルバックを使用して、アクティビティの状態を監視し、アクティビティが実行中かどうかを監視することができます。

関連する問題