Сквозная связь с BroadcastReceiver - PullRequest
0 голосов
/ 03 января 2012

Существует множество сообщений об использовании BroadcastReceiver для получения сообщений в Деятельности, которые транслируются из Службы.Я прошел через десятки и не нашел тот, который соединяет все это.Суть в том, что я не могу заставить свою активность получать трансляции.Вот что я сделал на сегодняшний день:

Трансляция класса обслуживания:

Context context = this.getApplicationContext();
Intent intentB2 = new Intent(context, StationActivity.AudioReceiver.class);
intentB2.putExtra("Track", mSongTitle);
this.sendBroadcast(intentB2);
Log.i(TAG, "Broadcast2: " + mSongTitle);

Объявление класса активности:

public String INCOMING_CALL_ACTION = "com.example.android.musicplayer.action.BROADCAST";

Встроенный класс активности BroadcastReceiver:

public class AudioReceiver extends BroadcastReceiver    
{ 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    // Handle receiver 
    Log.i(TAG, "Inner BroadcastReceiver onReceive()");
    String mAction = intent.getAction(); 

    if(mAction.equals(INCOMING_CALL_ACTION)) { 
        Log.i(TAG, "Inner BroadcastReceiver onReceive() INCOMING_CALL_ACTION");
    } 
  }
};

Объявление получателя манифеста Android:

    <receiver android:name=".StationActivity.AudioReceiver">
        <intent-filter>
            <action android:name="com.example.android.musicplayer.action.BROADCAST" />
        </intent-filter>            
    </receiver>

Чего мне не хватает?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 января 2012

К вашим услугам:

Intent intentB2 = new Intent("some_action_string_id");
intentB2.putExtra("Track", mSongTitle);
sendBroadcast(intentB2);

Затем в вашей деятельности:

public class MyActivity extends Activity {

    private BroadcastReceiver myReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(getApplicationContext(), "Woot! Broadcast received!", Toast.LENGTH_SHORT);
        }
    };

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter("some_action_string_id"); // NOTE this is the same string as in the service
        registerReceiver(myReceiver, filter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(myReceiver);
    }
}

Это обычный подход для получения событий трансляции в действиях.Обратите внимание, что мы регистрируем получателя, когда действие находится на переднем плане, и отменяем его регистрацию, когда действие больше не отображается.

0 голосов
/ 03 января 2012

замените свой сервисный код приведенным ниже кодом и добавьте строку String INCOMING_CALL_ACTION в свой сервис или используйте его непосредственно из класса активности.

Context context = this.getApplicationContext();
Intent intentB2 = new Intent();
intentB2.setAction(INCOMING_CALL_ACTION);
intentB2.putExtra("Track", mSongTitle);
this.sendBroadcast(intentB2);
 Log.i(TAG, "Broadcast2: " + mSongTitle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...