0

Я пытаюсь связывать/обновлять пользовательский интерфейс от службы к активности. Передача, которую я получаю, не то, что я отправил. Любые идеи почему?Связь между службой и активностью с использованием трансляций/намерений

Сервис-код:

@Override 
    //binder returns NULL 

    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     super.onStart(intent, startId); 
     Intent i = new Intent(); 
    i.putExtra("lol", "haha"); 
     i.setAction(MYACTION); 
     sendBroadcast(i); 

код активность:

protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     IntentFilter intentFilter = new IntentFilter(MYACTION); 
      registerReceiver(recv, intentFilter); 
    } 

    BroadcastReceiver recv = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // TODO Auto-generated method stub 
       Intent getintent = getIntent(); 
String action = getintent.getAction(); 
//ACTION RECEIVED IS DIFFERENT FROM MYACTION. IT IS ACTION.MAIN 

// VALUE RECEIVED IS NULL 
       String val = getintent.getStringExtra("lol"); 
       } 

Я не зарегистрировал приемник в манифесте. Это необходимо?

Как указано в комментариях: Я не получаю такое же действие в широковещательном приемнике, и значение от намерения равно NULL.

Что я делаю неправильно?

Благодарим за помощь.

ответ

4

Вам не нужно использовать getIntent, так как это переводит на намерения деятельности, а не на намерение трансляции. Поэтому в вашем случае вам нужно использовать только intent, который относится к трансляции намерений. И убедитесь, что вы делаете чек перед чтением желаемого значения из пакета, потому что может возникнуть вероятность того, что вы сначала получите другую трансляцию, которая не содержит lol в своем комплекте.

Так что в вашем радиовещательного приемника, сделать это следующим образом:

.... 
String val = getintent.getStringExtra("lol"); 

if(val.equals("your_action_string"){ 
    String val = intent.getStringExtra("lol"); //getIntent() replaced by intent 
} 
.... 

P.S. нет, вам не нужно регистрировать радиовещательный приемник, потому что он создан и используется программно

+0

Удивительно, спасибо. Это сработало. –

1

Если вы делаете веб-запросы или расширенные задачи, я проверю задачу async. Это упрощает обновление пользовательского интерфейса. Просто убедитесь, что вы вызываете onPreExecute() и onPostExecute() для этого. Мне не нравятся услуги и приемники.

http://developer.android.com/reference/android/os/AsyncTask.html

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