2016-10-18 1 views
0

Auf Knopf klicken ich öffne Tätigkeit (ActionListActivity) und sendende Absicht zu IntentService (später dieser Service sendet broadCast Absicht zu ActionListActivity). Aber ich bekomme normalerweise nur die erste Absicht vor Start. Ist es real, dass die Absicht gesendet wird, bevor der Empfänger registriert wird?BrodcastReciever empfängt 1 von 10 Absichten

Ich möchte Data Providt durch den IntentService erhalten und meine UI damit aktualisieren.

Schema Aktivitäts-> IntentService-> BroadCastReciver innen ActionListActivity

Aktivität:

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

Wenn Sie eine Frage zusammen mit Code stellen, beschreiben Sie auch, was Sie erreichen möchten, damit andere eine Idee haben, warum Sie sich für die Art und Weise entschieden haben, wie Sie gerade arbeiten. –

+0

@VivekMishra Ok, änderte die Frage ein wenig, irgendwelche Ideen? – Turbozanik

+0

Was ist der Einsatz von Intent-Service? –

Antwort

0

Sie starten Aktivität und Service async. Sie müssen den Dienst in ActionListActivity starten und auf die Antwort warten.

+0

Vielleicht verstehe ich dich nicht. Sie beabsichtigen, IntentService innerhalb von ActionListActivity & – Turbozanik

+0

@Turbozanik zu senden. Ja, dies ist die einzige Möglichkeit, um sicherzustellen, dass ein Callback ohne jegliche Art von Speicher existiert –

Verwandte Themen