Android getActiveNetwork始终返回null

时间:2017-08-09 03:35:56

标签: java android unity3d wifi android-connectivitymanager

我正在使用Unity和Tango SDK开发Tango应用程序,但是,我需要能够检查设备的Wifi连接并相应地连接到Wifi网络。

考虑到这一点,我开始研究Android Unity网络插件,但是我在检查设备的连接时遇到了麻烦。即使Wifi打开且设备确实连接到Wifi网络,getActiveNetwork仍会返回null。

我花了几天时间寻找变通方法或替代实现,但我找不到任何有用的东西,下面是我在查看了许多Android连接后最终用来执行检查的代码我看过的相关问题,以及我在Manifest中使用的所有权限。

(我想指出我当前正在返回一个整数作为通过Unity C#Scripts调用时快速调试函数的方法,现在函数总是返回0。)

 public int IsConnectedToWifi(){

        //SCCActivity activity = new SCCActivity();
        ConnectivityManager cm = (ConnectivityManager) this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        if(cm == null) return  -2;
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();


        if (activeNetwork != null) { // connected to the internet
            if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                // connected to wifi
                DebugToast(activeNetwork.getTypeName());
                return 1;
                //return activeNetwork.isConnected();
            } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                // connected to the mobile provider's data plan
                DebugToast(activeNetwork.getTypeName());
                return 2;
                //return false;
            }
        }
        else {
           DebugToast("There is no active Network");
            return 0;
            //return false;
        }

        DebugToast("Failed to get a Connectivity Manager");
        return -1;
        //return false;
    }

在AndroidManifest文件中:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

我非常感谢任何建议或指导,谢谢。

3 个答案:

答案 0 :(得分:0)

嘿我不知道你是否真的要检查手机是否连接到WIFI或MOBILE_INTERNET。

但是如果你只是想检查手机是否有连接 比下面的代码对我来说工作正常

public static final boolean isNetworkAvailable(Context context) {

    boolean connected = false;
    ConnectivityManager connectivityManager =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo nf = connectivityManager.getActiveNetworkInfo();
    if (nf != null && (nf.isConnected() || nf.isConnectedOrConnecting())) {
        // we are connected to a network
        connected = true;
    } else
        connected = false;

    return connected;
}

答案 1 :(得分:0)

经过进一步调试并查看类似案例后,我找到并解决了这个问题。

我会在这里留下我的解决方案,以防其他人遇到类似的问题。

基本上, getActiveNetwork 根本没有真正返回null,事实证明即使权限列在xml上,&#34; android.permission.ACCESS_NETWORK_STATE&#34;从来没有被授予,而且这个功能引发了异常。问题的原因是,正如我之前提到的,我正在使用Tango SDK for Unity处理Tango应用程序,而Tango SDK提供的xml正在从Java插件覆盖xml。

解决方案很简单;我只是将权限添加到Tango SDK的xml中。

答案 2 :(得分:0)

我有点老,但也许可以帮助某人。以我为例,当我更改 清单中的权限的顺序时, ACCESS_NETWORK_STATE 在INTERNET之前,工作

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

奇怪但有效