2016-10-18 6 views
0

ボタンをクリックすると、IntentServiceにインテントを送信します(後でこのサービスはbroadCastインテントをActionListActivityに送信します)。しかし、私はいつも最初のインテントの開始だけを受け取ります。受取人が登録される前に意図が送信されるのは本当ですか?BrodcastRecieverは10のインテントの1つのように鳴っています

intentServiceでデータプロデューサを取得し、それを使用してUIを更新したいとします。 ActionListActivity

内部

スキームアクティビティ - > IntentService-> BroadCastReciverアクティビティー:

private void selectDrawerItem(MenuItem menuItem) 
    { 
     switch (menuItem.getItemId()) { 
      case R.id.actions:{ 
       Intent myIntent = new Intent(this, ActionListActivity.class); 
       this.startActivity(myIntent); 
       ProgressDialog progressDialog = new ProgressDialog(this); 
       progressDialog.show(); 
       Intent dataIntent = new Intent(this, DatabaseWorkIntentService.class); 
       dataIntent.putExtra(Utils.INTENT_SERVICE_INVOKE, Utils.READ_ACTIONS_DATA); 
       startService(dataIntent); 
       progressDialog.dismiss(); 
      } 
     } 
    } 

IntentService:

 private void readActionData(){ 
      Log.e("read actions data","data"); 
      List<Action> actionList; 
      actionList = Action.listAll(Action.class); 

      Intent broadcastIntent = new Intent(); 
      broadcastIntent.setAction(Utils.READ_ACTIONS_DATA); 
      broadcastIntent.putParcelableArrayListExtra(Utils.READ_ACTIONS_DATA, (ArrayList<? extends Parcelable>) actionList); 
      sendBroadcast(broadcastIntent); 
     } 

ActionListActivity:

public class ActionListActivity extends BaseActivity { 

    boolean mIsReceiverRegistered = false; 
    DataBroadcastReceiver receiver; 
    TextView someTv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.action_list_activity); 
     this.initToolbarAndDrawerWithReadableName(getString(R.string.our_actions)); 

     someTv = (TextView)findViewById(R.id.someTv); 
    } 

    public void someTvTest(Action action){ 
     someTv.append(action.getName()); 
     Log.e("data",action.getName()); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (mIsReceiverRegistered) { 
      unregisterReceiver(receiver); 
      receiver = null; 
      mIsReceiverRegistered = false; 
     } 
    } 

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

     if (!mIsReceiverRegistered) { 
      if (receiver == null) 
       receiver = new DataBroadcastReceiver(); 
      IntentFilter filter = new IntentFilter(); 
      filter.addAction(Utils.READ_ACTIONS_DATA); 
      receiver.setMainActivityHandler(this); 
      registerReceiver(receiver, filter); 
      mIsReceiverRegistered = true; 
     } 
    } 
} 
class DataBroadcastReceiver extends BroadcastReceiver{ 

    ActionListActivity activity = null; 
    ArrayList<Action> list; 

    public void setMainActivityHandler(ActionListActivity main){ 
     activity = main; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.e("reciever","reciev"); 
     list = intent.getParcelableArrayListExtra(Utils.READ_ACTIONS_DATA); 
     for (Action action:list){ 
      if(activity!=null) { 
       activity.someTvTest(action); 
      } 
     } 
    } 
} 
+0

質問に沿って質問をする際には、達成したいことも記述して、他の人があなたが現在働いている方法を選んだ理由を知ることができます。 –

+0

@VivekMishra [OK]を、少しの質問、少しのアイデアを変更? – Turbozanik

+0

インテントサービスの利用は何ですか? –

答えて

0

アクティビティを開始し、非同期にサービスします。 ActionListActivity内でサービスを開始し、応答を待つ必要があります。

+0

多分私はあなたを理解していません。あなたはIntentServiceにActionListActivity& – Turbozanik

+0

@Turbozanikの内部でIntentServiceに送ることを意味します。これは、コールバックがストレージの種類なしで存在することを確認する唯一の方法です –

関連する問題