2012-01-02 6 views
0

サービスからブロードキャストされたアクティビティ内のメッセージを受信するために、BroadcastReceiverを使用して多くの投稿があります。私は何十もありましたが、それをすべてまとめているものは見つかりませんでした。結論は、放送を受信するために私の活動を得ることができません。ここで私は今までにやったものだ:End to end 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); 

Activityクラスの宣言:

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> 

何が欠けていますか?前もって感謝します。

答えて

0

サービスコードを以下のコードに置き換えて、サービス内に文字列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); 
1

:あなたの活動の後

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

ありがとうございます。どちらの回答も、サービスクラスが自分の欠点となっていたアクションを適切に設定することに重点を置いていました。何らかの理由で私はregisterReceiver()ピースがサービスで発生すると思ったが、私はそうは思わなかった。今すぐ動作します。 – Jslmns71