我正在从我的一个班级发送广播:
// Sending broadcast from my db helper constructor
public DBHelper(Context ctx){
this.ctx = ctx;
Intent intent = new Intent();
intent.setAction("custom.alert.abc");
intent.putExtra("key",77);ctx.sendBroadcast(intent);
//registering the broadcast in one of my activities oncreate
IntentFilter alaramfilter = new IntentFilter();
alaramfilter.addAction("custom.alert.abc");
registerReceiver(alarmreceiver, alaramfilter);
//and declaring it
private final BroadcastReceiver alarmreceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("Broadcast received inside on receive");
final String action = intent.getAction();
if(action.equals("custom.alert.abc")) {
Log.d("CPSnippetMain","My custom broadcast called");
try {
System.out.println("Broadcast received");
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
问题是,虽然调用构造函数并发送广播,但不会调用onreceive。
感谢任何帮助。
答案 0 :(得分:3)
sendbroadcast
和register
的顺序非常重要。
首先注册,然后进行sendBroadcast。
答案 1 :(得分:0)
注册电视广播
private BroadcastReceiver receiver_;
@Overrride
public void onCreate(Bundle savedInstanceState){
IntentFilter filter_data = new IntentFilter();
filter_data .addAction("SOME_ACTION");
receiver_= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do something based on the intent's action
}
}
registerReceiver(receiver_, filter_data );
和ondestroy方法中的unregisterReceiver
unregisterReceiver(receiver _p>