I register a BroadcastReceiver
within MyService
,
public class MyService extends Service {
final static String ACTION_ONE = "one";
final static String ACTION_TWO = "two";
BroadcastReceiver receiver;
and a inner class
// use this as an inner class like here or as a top-level class
public class MyReceiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// do something
Log.d("tag", "received! MyReceiver2");
}
// constructor
public MyReceiver2(){
}
}
onCreate
method:
@Override
public void onCreate() {
receiver = new MyReceiver2();
IntentFilter filter = new IntentFilter();
filter.addAction(MyService.ACTION_ONE);
filter.addAction(MyService.ACTION_TWO);
MyService.this.registerReceiver(receiver, filter);
}
And the code below is in MainActivity
to send a broadcast:
sendBroadcast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), MyService.class);
intent.setAction(MyService.ACTION_TWO);
sendBroadcast(intent);
}
});
I can't understand why MyService
(started, and is not yet destoryed) can not receive broadcast.
If I change the receiver
variable to a MyReceiver
class that extends BroadcastReceiver
and has already been proved to work,
MyService
is still not receiving broadcast.
myReceiver = new MyReceiver();
Here is MyReceiver
(it is proved that it works well):
public class MyReceiver extends BroadcastReceiver{
public MyReceiver(){
Log.d("tag", "MyReceiver Constructor");
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("tag", "received");
}
}
============EDIT================
manifest
Both
<service
android:name=".MyService"
android:enabled="true"
android:exported="true" >
<intent-filter >
<action android:name="one" />
<action android:name="two" />
</intent-filter>
</service>
and
<service
android:name=".MyService"
android:enabled="true"
android:exported="true" >
</service>
do not work.