接收器生命周期 - 在onResume()中重新注册时崩溃

时间:2012-02-27 14:29:33

标签: android bluetooth broadcastreceiver lifecycle

我得到“无法恢复活动”RunTimeException,它显然与我的broadcastReciever(用于蓝牙)有关。 onPause效果很好。但是这个简单的代码出了什么问题?

//Class fields:
    boolean isReceiverRegistered = false; //My flag
    IntentFilter intentFilter = null;

//Inside onCreate:
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
        intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
    if (!isReceiverRegistered) {
        registerReceiver(intentReceiver, intentFilter);
        isReceiverRegistered = true;
    }


protected void onResume() {
    super.onResume();
    if (!isReceiverRegistered) {
        registerReceiver(intentReceiver, intentFilter); //THE CRASH STATEMENT
        isReceiverRegistered = true;
    }
}

protected void onPause() {
    super.onPause();
    if (isReceiverRegistered) {
        try {
            unregisterReceiver(intentReceiver);
        } catch (IllegalArgumentException e) {
        }
        isReceiverRegistered = false;
    }
}

BroadcastReceiver intentReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
        Log.v(TAG, "connected:"+device.getName());
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
        Log.v(TAG, "disconnected:"+device.getName());
        }
    }
};

1 个答案:

答案 0 :(得分:2)

在onCreate中,您创建了intentFilter,但您的类字段intentFilter仍然为null。尝试 在你的onCreate:

     .....
    intentFilter = new IntentFilter();
    intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
    intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
      .....