在Android M上通过WiFi发送请求

5

我目前正在开发一个Android应用程序,自从Android 6.0更新后,出现了问题:无法通过私人网络进行请求!

例如: 步骤1:连接到没有提供互联网连接的WiFi 步骤2:在本地IP(例如:192.168.1.168)上进行请求(例如:POST请求)

在除了Android 6.0之外的任何Android版本中:我可以从本地Web服务器获得响应。 在Android M上:没有响应:我的请求通过移动数据发送。

当我关闭移动数据时,请求会通过WiFi并得到正确的答案。 请告诉我如果我错了,显然我不能通过编程方式关闭数据或使用API 23强制使用WiFi来解决我的问题...

1个回答

6

以下是我解决问题的方法,如果有人感兴趣:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        ConnectivityManager connectivityManager = (ConnectivityManager) mCtx.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network activeNetwork = connectivityManager.getActiveNetwork();
        if (WifiConnectionManager.getInstance(mCtx).isConnectedToALocalWifi()) {
            for (Network net : connectivityManager.getAllNetworks()) {
                if (!net.equals(activeNetwork)) {
                    connectivityManager.bindProcessToNetwork(net);
                    try {
                        net.openConnection(new URL(mCtx.getString(R.string.wifi_cam_url)));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

        }

}

玩得开心!


有没有办法在完成了特定私有网络的作业后,将进程与网络解绑?我的意思是,我还需要使用常规网络发送来自应用程序的请求。似乎在进行绑定后,我无法正确发送任何其他请求。 - Keselme

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