2012-02-27 36 views
2

我得到「無法恢復活動」RunTimeException,它顯然與我的broadcastReciever(藍牙)有關。 onPause運作良好。但是這個簡單的代碼有什麼問題?接收器生命週期 - 在onResume重新註冊時崩潰()

//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()); 
     } 
    } 
}; 

回答

2

在onCreate中,您創建了intentFilter,但是您的類字段intentFilter仍爲null。嘗試 在您的onCreate:

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

是的!謝謝。我開始在Android環境中學習java。我經常想念這些基本的java事物,但只想到更高層次的Android事物。我現在意識到我需要練習一些基本的Java,以便學會「看」這樣的錯誤。 – Tombola 2012-02-27 14:55:25