安卓:ConnectivityManager 始终返回 null

5
无论我连接到这个代码的wifi上,我总是会得到一个空指针异常:
       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" />

我错过了什么吗?我只需要知道他是否连接到wifi,以及何时更改。但是连接管理器总是在ActiveNetworkInfo上返回null。

5个回答

15

使用此代码来检测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
}

}

:这是一个HTML标签,它只包含了一个右花括号" } "。

我认为您提供的代码可以用于数据和Wifi - 或者您是指这仅适用于WIFI?谢谢。 - AlexVPerl

1

connectivityManager.getActiveNetworkInfo()

更新:
返回当前设备的活动网络连接状态,如果您的设备仅支持 WiFi 并且未打开 WiFi,则始终为 null。
建议注册以下接收操作: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
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;
}

-1

你检查过数据连接是否已激活吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接