2012-03-12 65 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; 
}