无法获得广播

时间:2011-11-15 00:35:20

标签: java android android-intent broadcastreceiver

虽然我已经注册了,但我无法接收广播意图。你能否发现错误。非常感谢你。我尝试使用日志消息,但它从未到达广播接收器类的onReceive()。

这是我发送广播的类

public class ServiceDemoActivity extends Activity {
Button startButton,stopButton,pauseButton;
final String musicIntentAction="com.CompetenceProject.Musicfilter";
Intent musicIntent=new Intent();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    startButton=(Button)findViewById(R.id.startButton);
    stopButton=(Button)findViewById(R.id.Stopbutton);
    pauseButton=(Button)findViewById(R.id.Pausebutton);


   musicIntent.setAction(musicIntentAction);
    startButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.w("DEBUG", "Came to StartButton");
            musicIntent.putExtra("Message","start");
            sendBroadcast(musicIntent);
            Toast.makeText(getApplicationContext(), "starBroadcaseSent",1000).show();

        }

    });
    stopButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.w("DEBUG", "Came to StopButton");
            musicIntent.putExtra("Message","stop");
            sendBroadcast(musicIntent);
            Toast.makeText(getApplicationContext(), "stopBroadcaseSent",1000).show();
        }
    });

    pauseButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.w("DEBUG", "Came to PauseButton");
            musicIntent.putExtra("Message","pause");
            sendBroadcast(musicIntent);
            Toast.makeText(getApplicationContext(), "PauseBroadcaseSent",1000).show();
        }
    });


}
}

这是收听广播的班级:

  public class MusicBroadcsatListener extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    Log.w("DEBUG", "Came to BroadCast OnRecieve");
    Bundle extras = intent.getExtras();
    String res=extras.getString("Message");
    Toast.makeText(context, "Intent Extra is "+res, 1000).show();
    Log.v("BroadCase","true");
    System.out.println("Broadcast came here");
    if(res.equalsIgnoreCase("start"))
        Toast.makeText(context, "start", 1000).show();

        else if(res.equalsIgnoreCase("pause")) 
            Toast.makeText(context, "pause", 1000).show();

        else if (res.equalsIgnoreCase("stop"))
            Toast.makeText(context, "stop", 1000).show();
    }
}

这是Androidmanifest:

       <activity
        android:label="@string/app_name"
        android:name=".ServiceDemoActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <receiver android:name=".MusicBroadcsatListener" android:enabled="true">
        <intent-filter>
            <action android:name="com.CompetenceProject.Musicfilter"></action>
        </intent-filter>
    </receiver>

谢谢。

3 个答案:

答案 0 :(得分:0)

我要做的第一件事就是检查你的Manifest.xml文件中的这个拼写错误。我在这里看不到你的接收器类的名字,但如果它的名字中有“广播”,你拼写错误的“广播” - “MusicBroadcsatListenter” - 在manifest.xml文件中:

<receiver android:name=".MusicBroadcsatListener" android:enabled="true">

答案 1 :(得分:0)

要进行测试,您必须在执行活动之前执行广播接收器 - 在同一设备上 - 因为接收器需要运行。我不确定最好的方法,但出于好奇,我将你的代码复制并粘贴到Eclipse中,分成两个独立的项目 - 一个用于接收器,一个用于活动。我执行了接收器项目,然后是活动项目,你的代码运行正常。如果有人有更好的方法来测试这个,请发布,因为我也想知道。

答案 2 :(得分:0)

我自己找到了解决方案。我把接收器放在活动标签内。谢谢大家的支持。