[英]BroadcastReveiver is not registering
I cannot figure out why I keep getting an error saying: 我不知道为什么我总是收到错误消息:
11-10 17:14:04.904: E/AndroidRuntime(8151): Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.refect.served.fragment.activities.DrinkReleaseStation$PushBroadcastReceiver@541e0ce4
I clearly register my receiver on my onCreate() method. 我清楚地在onCreate()方法上注册了接收者。 But when I try unregistering it, it crashes and gives me that error.
但是,当我尝试取消注册时,它崩溃并给我该错误。 Here's the rest of my code:
这是我其余的代码:
public class DrinkReleaseStation extends FragmentActivity {
private PushBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.admin_new_bar);
String barId = getIntent().getExtras().getString("BarId");
orders = new ArrayList<ParseObjectModel>();
saveInstallation(barId);
ordersListView = (ListView) findViewById(R.id.lv_bars);
adapter = new DrinkManagerAdapter(this, orders);
ordersListView.setAdapter(adapter);
fab = (Button) findViewById(R.id.btn_add_new_bar);
//fab.setDrawable(getResources().getDrawable(R.drawable.ic_navigation_accept));
registerReceiver();
} //end onCreate
@Override
public void onResume() {
super.onResume();
registerReceiver();
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
unsubscribeInstallation();
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(receiver);
unsubscribeInstallation();
}
private void registerReceiver() {
receiver = new PushBroadcastReceiver();
IntentFilter filter = new IntentFilter();
// filter.addAction(Intent.ACTION_BOOT_COMPLETED);
// filter.addAction(Intent.ACTION_USER_PRESENT);
filter.addAction("com.google.android.c2dm.intent.RECEIVE");
registerReceiver(receiver, filter);
Log.d("ReleaseStation", "Receiver Registered");
}
/**
* BroadcastReceiver for receiving
* push messages from Parse
* @author Austin
*
*/
public class PushBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
Log.d("Order", intent.getAction());
Toast.makeText(context, "New Order!.",
Toast.LENGTH_SHORT).show();
}
}
}
}
You are calling unregisterReceiver()
in both onPause()
and onDestroy()
. 您正在
onPause()
和onDestroy()
都调用unregisterReceiver()
onDestroy()
。 It is guaranteed that by the time onDestroy()
is called, onPause()
will have been called. 确保在调用
onDestroy()
已调用onPause()
。 Hence, get rid of the onDestroy()
call to unregisterReceiver()
, and you should be in better shape. 因此,摆脱对
unregisterReceiver()
的onDestroy()
调用,您的状态应该会更好。
Generally speaking, stick to the pairs: 一般来说,坚持以下原则:
onCreate()
, clean it up in onDestroy()
onCreate()
对其进行初始化,请在onDestroy()
清理 onStart()
, clean it up in onStop()
onStart()
清理中onStop()
onResume()
, clean it up in onPause()
onResume()
对其进行初始化,请在onPause()
清理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.