2014-02-13 58 views
2
public class NetworkConnectivityListener { 
     private static final String TAG = "NetworkConnectivityListener"; 
     private static final boolean DBG = false; 
     private Context mContext; 
     private HashMap<Handler, Integer> mHandlers = new HashMap<Handler, Integer>(); 
     private State mState; 
     private boolean mListening; 
     private String mReason; 
     private boolean mIsFailover; 
    private NetworkInfo mNetworkInfo; 


    private NetworkInfo mOtherNetworkInfo; 
    private ConnectivityBroadcastReceiver mReceiver; 
    private class ConnectivityBroadcastReceiver extends BroadcastReceiver { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String action = intent.getAction(); 

       if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION) || 
        mListening == false) { 
        Log.w(TAG, "onReceived() called with " + mState.toString() + " and " + intent); 
        return; 
       } 

       boolean noConnectivity = 
        intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 

       if (noConnectivity) { 
        mState = State.NOT_CONNECTED; 
       } else { 
        mState = State.CONNECTED; 
       } 

       mNetworkInfo = (NetworkInfo) 
        intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
       mOtherNetworkInfo = (NetworkInfo) 
        intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 

       mReason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); 
       mIsFailover = 
        intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false); 

       if (DBG) { 
        Log.d(TAG, "onReceive(): mNetworkInfo=" + mNetworkInfo + " mOtherNetworkInfo = " 
          + (mOtherNetworkInfo == null ? "[none]" : mOtherNetworkInfo + 
          " noConn=" + noConnectivity) + " mState=" + mState.toString()); 
       } 

       // Notifiy any handlers. 
       Iterator<Handler> it = mHandlers.keySet().iterator(); 
       while (it.hasNext()) { 
        Handler target = it.next(); 
        Message message = Message.obtain(target, mHandlers.get(target)); 
        target.sendMessage(message); 
       } 
      } 
     }; 

     public enum State { 
      UNKNOWN, 

      /** This state is returned if there is connectivity to any network **/ 
      CONNECTED, 
      ONNECTED 
     } 


     public NetworkConnectivityListener() { 
      mState = State.UNKNOWN; 
      mReceiver = new ConnectivityBroadcastReceiver(); 
     } 

     /** 
     * This method starts listening for network connectivity state changes. 
     * @param context 
     */ 
     public synchronized void startListening(Context context) { 
      if (!mListening) { 
       mContext = context; 

       IntentFilter filter = new IntentFilter(); 
       filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
       context.registerReceiver(mReceiver, filter); 
       mListening = true; 
      } 
     } 

     /** 
     * This method stops this class from listening for network changes. 
     */ 
     public synchronized void stopListening() { 
      if (mListening) { 
       mContext.unregisterReceiver(mReceiver); 
       mContext = null; 
       mNetworkInfo = null; 
       mOtherNetworkInfo = null; 
       mIsFailover = false; 
       mReason = null; 
       mListening = false; 
      } 
     } 


     public void registerHandler(Handler target, int what) { 
      mHandlers.put(target, what); 
     } 

     /** 
     * This methods unregisters the specified Handler. 
     * @param target 
     */ 
     public void unregisterHandler(Handler target) { 
      mHandlers.remove(target); 
     } 

     public State getState() { 
      return mState; 
     } 


     public NetworkInfo getNetworkInfo() { 
      return mNetworkInfo; 
     } 


     public NetworkInfo getOtherNetworkInfo() { 
      return mOtherNetworkInfo; 
     } 


     public boolean isFailover() { 
      return mIsFailover; 
     } 


     public String getReason() { 
      return mReason; 
     } 
    } 

我把這個代碼註冊一個reciever檢查互聯網連接Availability.And我用下面的線把它放在Manifiest文件。但當嘗試這個代碼,我得到以下錯誤。我用這個代碼schaeck互聯網連接之前,我送一些data.I DONOT知道如何在manifest文件中註冊該無法註冊廣播reciver onManifiest文件

02-13 16:59:31.109: E/AndroidRuntime(28123): java.lang.RuntimeException: Unable to instantiate receiver org.apache.cordova.example.NetworkConnectivityListener: java.lang.ClassCastException: org.apache.cordova.example.NetworkConnectivityListener cannot be cast to android.content.BroadcastReceiver 
+1

因爲NetworkConnectivityListener不是BroadcastReceiver的子節點,所以錯誤彈出爲什麼 –

+0

NetworkConnectivityListener nw = new NetworkConnectivityListener(); \t \t \t \t \t \t Log.i( 「BP網絡在」,nw.getState()的toString());我綁這個,但它總是給出消息,即使互聯網是未知的 – user2771059

回答

1

由於NetworkConnectivityListener不是廣播接收器的孩子,這就是爲什麼錯誤彈出的高達 SOLUTION: 清單文件註冊聽衆如下,

<receiver android:name="org.apache.cordova.example.NetworkConnectivityListener$ConnectivityBroadcastReceiver" /> 

ALTERNATE:

註冊接收器的NetworkConnectivityListener內本身作爲你在Manifest中刪除了條目。

0

從廣播接收器延長NetworkConnectivityListener,你要註冊普通班,而不是廣播接收器類

+0

你能告訴我如何訪問此reciver狀態 – user2771059

+0

NetworkConnectivityListener nw = new NetworkConnectivityListener(); \t \t \t \t \t \t Log.i( 「BP網絡在」,nw.getState()的toString());我把這個綁在了一起,但它始終給出了即使互聯網是可用的未知消息 – user2771059