【发布时间】:2016-03-06 19:06:35
【问题描述】:
我正在我的 Android 应用程序中运行一个命令行参数,例如:
ProcessBuilder pb = new ProcessBuilder(cmds);
Process process = pb.start();
process.waitFor();
cmds 是要运行的参数列表。我的命令通过 http 连接探测远程 URL。我的设备连接到无法访问互联网的 WiFi 网络,但托管了我要探测的 URL。我的设备还具有可以访问互联网但不能访问 URL 的蜂窝连接。我的设备运行的是 Android 6.0 Marshmallow。
通常在 Lollipop 或更高版本中,Android 默认使用连接到 Internet 的网络。要在没有互联网的情况下访问 WiFi 网络,您需要使用 NetworkRequest,例如:https://stackoverflow.com/a/27958106/1847734。
如何将获得的Network 传递给上面的Process,以便连接通过我的 WiFi 网络,而不是我的蜂窝网络?
我是否需要改用ConnectivityManager#bindProcessToNetwork?如何加入使用此方法设置网络的过程?似乎没有提供该过程的选项。
【问题讨论】:
-
棘手的问题。如果您在构建和启动进程之前将网络绑定到您的应用程序进程,您会幸运地继承了网络吗?
-
不幸的是,不,它似乎没有。
-
@JonG 你是怎么解决这个问题的?您是否按照建议使用了本机实现?我遇到了完全相同的问题,我能够为 API >= 21 绑定“正常”网络请求,但找不到绑定进程的方法(我还需要使用“ping”进行测试)
-
@soey 你们找到解决方案了吗?我尝试在 Java 中设置默认网络,但没有成功。接下来,我用正确的网络在 Java 中创建了 Socket,并将描述符传递给 Native 子进程,但效果不佳。
-
@Himanshu 抱歉,我没有找到解决方案。我认为这是一个非常具体的问题。我最终忽略了它,例如在这种情况下不执行该过程,这对我的用例来说已经足够了。我想我在某处看到了一个解决方案,他们使用了本机套接字实现(在 C 中),但我在 atm 中找不到它。另外我对使用本机代码不是很有经验。
标签: android networking connection wifi android-6.0-marshmallow