2015-10-23 2 views
0

myButton - это кнопка, которая при нажатии должна получать трансляцию с фона IntentService. Но трансляция никогда не принимается. Однако, если я перемещаю широковещательный приемник вне функции myButton.setOnClickListener, я начинаю получать трансляции из моей фоновой службы.Android-приемник с трансляцией вещания внутри onClickListener

Есть ли способ заставить трансляцию получать трансляции в функции setOnClickListener?

public class MainActivity extends Activity { 

private BroadcastReceiver broadcastReceiver; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    myButton = (Button)findViewById(R.id.button1); 
    myButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      broadcastReceiver = new BroadcastReceiver() { 

       @Override 
       public void onReceive(Context arg0, Intent intent) { 

        Toast.makeText(MainActivity.this, "BROADCAST RECEIVED", Toast.LENGTH_SHORT).show(); 
        stopService(msgIntent); 
       } 
      }; 

     } 
    }); 

    public void onResume() 
    { 
    super.onResume(); 

    IntentFilter filter = new IntentFilter(SimpleIntentService.ACTION_RESP); 
    filter.addCategory(Intent.CATEGORY_DEFAULT); 
    registerReceiver(broadcastReceiver,filter); 


    } 

    public void onPause() 
    { 
    unregisterReceiver(broadcastReceiver); 
    super.onPause(); 
    } 

} 

Мне пришлось вытащить широковещательный приемник по методу onClick. Это работает и широковещательный получил:

public class MainActivity extends Activity { 

    private BroadcastReceiver broadcastReceiver; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    myButton = (Button)findViewById(R.id.button1); 
    myButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      //do extra stuff 
     } 
    }); 
    broadcastReceiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context arg0, Intent intent) { 

       Toast.makeText(MainActivity.this, "BROADCAST RECEIVED", Toast.LENGTH_SHORT).show(); 
       stopService(msgIntent); 
      } 
     }; 
    } 
} 
+0

Где вы зарегистрировать '' BroadcastReceiver? – shhp

+0

что вам нужно сделать, это зарегистрировать приемник нажатием кнопки. –

ответ

0

ли вы забыли registerReceiver?

Возможно, вам понадобится назначить IntentFilter при регистрации ресивера.

Ниже некоторые примеры кодов из моего проекта:

private class LocationInfoReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // do something 
    } 
} 

locationInfoReceiver = new LocationInfoReceiver(); 
// the key you use setAction() method in your Intent Service 
IntentFilter locationInfoReceiverFilter = new IntentFilter("your key"); 
locationInfoReceiverFilter.addCategory(Intent.CATEGORY_DEFAULT); 
registerReceiver(locationInfoReceiver, locationInfoReceiverFilter); 
+0

У меня есть регистр приемника в функции onResume(). Также попытался зарегистрировать его перед функцией onClick, и он не сработал. Выполняется только прием широковещательного приемника вне метода onClick. Я редактировал методы onResume и onPause. – Dobob

+0

Где Вы хотели бы начать обслуживание? Я не вижу этого в вашем коде. Кстати, согласно [этому сообщению] (http://stackoverflow.com/questions/7191109/difference-between-code-before-and-after-super), порядок, который вы положили super.onPause в методе переопределения " onPause "может вызвать некоторые проблемы, возможно, вы можете переместить его назад и повторить попытку. –

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