2011-03-09 116 views
1

我想使用BroadcastReceiver獲取Internet連接狀態。BroadcastReceiver後運行時異常

接收器類是這樣的:

public class ConnectivityReceiver extends BroadcastReceiver { 

    WebView mWebView; 



    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     Log.d(MSResearch.LOG_TAG, "Connectivity action: " + intent.getAction()); 
     if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 
      WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
      Log.e(MSResearch.LOG_TAG, "Setting wifistate: " + wm.getWifiState()); 
     } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
      NetworkInfo ni = intent.getParcelableExtra (ConnectivityManager.EXTRA_NETWORK_INFO); 
      Log.e(MSResearch.LOG_TAG, "Setting isConnected: " + ni.isConnected()); 
     } 
    } 
} 

我實例化的onCreate接收()函數,並試圖在onPause中註冊的onResume接收機()我活動類和註銷它()。

public onCreate(){ 
... 
conReceiver = new ConnectivityReceiver(); 
itFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
itFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 
... 
} 

@Override 
public void onResume(){ 
    registerReceiver(conReceiver,itFilter); 
} 

@Override 
public void onPause(){ 
    unregisterReceiver(conReceiver); 
} 

我在onResume調用之後立即得到運行時異常。誰能告訴我我做錯了什麼?我甚至試圖簡單地將接收器標籤添加到清單xml文件中,而不是在我的活動中註冊,但是我仍然得到運行時異常。我已經在2.2和2.3模擬器上試過了,並且遇到了同樣的問題。

Thread [<1> main] (Suspended (exception RuntimeException)) 
    ActivityThread.performResumeActivity(IBinder, boolean) line: 3128 
    ActivityThread.handleResumeActivity(IBinder, boolean, boolean) line: 3143 
    ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2684 
    ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 125 
    ActivityThread$H.handleMessage(Message) line: 2033 
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627  
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
    Method.invoke(Object, Object...) line: 521 
    ZygoteInit$MethodAndArgsCaller.run() line: 868 
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method] 

回答

1

我也有類似的問題,連接到服務,並拋出的錯誤,因爲我是在遠程調用的綁定完成之前。

我建議你在調用registerReceiver之前檢查你的所有對象是否已經初始化。