2012-03-12 64 views
3

我總是得到一個空指針異常,甚至當我連上wifi在這段代碼:安卓:ConnectivityManager總是返回null

 ConnectivityManager connectivityManager = (ConnectivityManager) 
       context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    Log.d("Problem", connectivityManager.getActiveNetworkInfo().toString()); 

我的權限是:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.SEND_SMS" > 
</uses-permission> 
<uses-permission android:name="android.permission.RECEIVE_SMS" > 
</uses-permission> 
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CONNECTIVITY_CHANGE" /> 

我錯過了什麼:/?我只需要知道他何時連接到無線網點以及何時發生了變化。但連接性管理總是在ActiveNetworkInfo

返回null

回答

10

使用該知道,WIFI連接與否。

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 

public class Network { 
private Context context; 
private ConnectivityManager connManager; 

public Network(Context ctx) { 
    this.context = ctx; 
} 

public boolean getConnectivityStatus() { 
    connManager = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo info = connManager.getActiveNetworkInfo(); 
    if (info != null) 
     return info.isConnected(); // WIFI connected 
    else 
     return false; // no info object implies no connectivity 
} 

}

+0

我認爲你提供的代碼可以用於數據和Wifi - 或者你的意思是說這隻適用於WIFI?謝謝。 – AlexVPerl 2016-03-03 16:40:22

1

connectivityManager.getActiveNetworkInfo()

更新:

返回當前設備的活動網絡連接,如果您的設備有隻有WiFi和WiFi沒有打開,它總是空。

建議註冊的動作獲得:ConnectivityManager.CONNECTIVITY_ACTION

時收到的動作,你可以檢查使用連接如下代碼:

NetworkInfo network = mConnectivityManager.getActiveNetworkInfo(); 
     if (network != null) { 
      boolean isConnectedOrConnecting = network.isConnectedOrConnecting(); 
      ... 
     } 
0
//decleration 

boolean net; 


//OnCreate 
net = isOnline(); 
if (net == true) { 
//perform internet related task. 
} 
else 
{ 

         AlertDialog.Builder alert = new AlertDialog.Builder(
           AddSite.this); 

         alert.setMessage(
           "No signal found or Internet connection is not connected.") 
           .setTitle("Error") 
           .setNeutralButton("OK", 
             new DialogInterface.OnClickListener() { 

              public void onClick(
                DialogInterface dialog, 
                int which) { 
               // TODO Auto-generated method 
               // stub 

              } 
             }).show(); 

} 

//function 

public boolean isOnline() { 
     ConnectivityManager cm = (ConnectivityManager) this 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 

     // return cm.getActiveNetworkInfo().isConnected(); 

    } 
0

你檢查,如果數據聯接被激活?

0
public static boolean isNetworkAvailable(Context ctx) { 
    NetworkInfo info = getActiveNetworkInfo(ctx); 
    return info != null && info.isAvailable(); 
} 

public static boolean isWifiAvailable(Context ctx) { 
    NetworkInfo info = getActiveNetworkInfo(ctx); 
    return info != null && info.isAvailable() 
      && info.getType() == ConnectivityManager.TYPE_WIFI; 
} 

private static NetworkInfo getActiveNetworkInfo(Context ctx) { 
    ConnectivityManager cm = (ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info = cm.getActiveNetworkInfo(); 
    return info; 
}