Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setProcessDefaultNetwork始终返回false_Java_Android_Networking - Fatal编程技术网

Java setProcessDefaultNetwork始终返回false

Java setProcessDefaultNetwork始终返回false,java,android,networking,Java,Android,Networking,我正在开发一款应用程序,它只在连接到移动数据网络时执行一些安全操作。我正试图让应用程序强制其所有网络流量通过特定网络,因此我正在查看在级别21中添加的api调用: 也为空 我还尝试了另一种方法,以防根据另一个答案网络不可用,所以我看到: ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkRequest.

我正在开发一款应用程序,它只在连接到移动数据网络时执行一些安全操作。我正试图让应用程序强制其所有网络流量通过特定网络,因此我正在查看在级别21中添加的api调用:

也为空

我还尝试了另一种方法,以防根据另一个答案网络不可用,所以我看到:

    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkRequest.Builder builder = new NetworkRequest.Builder();
        builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
        NetworkCallback networkCallback = new NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                Log.d("ANDREW", "Network is available!");
                boolean result = ConnectivityManager.setProcessDefaultNetwork(network);
                Log.d("ANDREW", "RESULT: " + result);
                if (ConnectivityManager.getProcessDefaultNetwork() != null) {
                    Log.d("ANDREW", "Successfully set default network ");
                }
            }
        };
        NetworkRequest networkRequest = builder.build();
        connectivityManager.requestNetwork(networkRequest, networkCallback);
        connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
我得到了isAvailable回调,但它仍然无法设置默认网络


没有日志消息可供使用,我甚至查看了本机代码,但没有任何东西可以指出问题所在。SDK没有描述我能看到的任何额外步骤,所以我的问题是,为什么这总是返回false,开发人员应该做什么才能让它工作?我在Nexus 5和Nexus 6上都尝试过这一点。

我发现了它不起作用的原因,本机代码创建了一个套接字,该套接字也恰好需要INTERNET许可。SDK中未列出此权限,但您的应用程序需要此权限才能设置默认网络。

对于学分,可在此处找到替代方法问题:
Network defProcNetwork = ConnectivityManager.getProcessDefaultNetwork();
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkRequest.Builder builder = new NetworkRequest.Builder();
        builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
        NetworkCallback networkCallback = new NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                Log.d("ANDREW", "Network is available!");
                boolean result = ConnectivityManager.setProcessDefaultNetwork(network);
                Log.d("ANDREW", "RESULT: " + result);
                if (ConnectivityManager.getProcessDefaultNetwork() != null) {
                    Log.d("ANDREW", "Successfully set default network ");
                }
            }
        };
        NetworkRequest networkRequest = builder.build();
        connectivityManager.requestNetwork(networkRequest, networkCallback);
        connectivityManager.registerNetworkCallback(networkRequest, networkCallback);