简体   繁体   English

BroadcastReveiver未注册

[英]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: 一般来说,坚持以下原则:

  • if you initialize it in onCreate() , clean it up in onDestroy() 如果您在onCreate()对其进行初始化,请在onDestroy()清理
  • if you initialize it in onStart() , clean it up in onStop() 如果您在初始化它onStart()清理中onStop()
  • if you initialize it in onResume() , clean it up in onPause() 如果您在onResume()对其进行初始化,请在onPause()清理

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM