WIFI Direct和3G数据会话可以同时工作吗?

问题描述 投票:1回答:5

3G数据会话和WIFI Direct可以同时工作吗?如果是这样,那么两个IPaddress存在,会引起混淆吗?一个例子:

使用3G下载视频文件,现在进度为50%。现在A选择一张图片,并想用WIFIDirect分享给B.这样会不会中断视频文件下载?说WIFI连接没问题,然后A有2个IP地址,在图片共享中,将使用哪个IP地址?

android wifi android-wifi wifimanager wifi-direct
5个回答
2
投票

当我的3G开启时,我正在Galaxy Nexus上运行自己的WiFi Direct应用程序,到目前为止我没有遇到任何问题。这当然是因为WiFi Direct应用程序使用的是android.net.wifi.p2p软件包。当你通过3G获得IP时,使用android.net.wifi包。因此,您的设备可以使用两种不同的IP地址。对于图片共享,将使用本地IP。


1
投票

我不认为两个同时连接是可能的,因为当你打开WiFi时,它会自动关闭3g并使用WiFi作为默认连接。反之亦然。

至少这是我在所有Android手机上发现的行为。


0
投票

3G数据会话和WIFI Direct可以同时工作吗?是的...可以工作

这会成功而不会中断视频文件的下载吗?是..

在图片共享中,将使用哪个IP地址?我猜本地IP。还没检查过


0
投票

虽然Android手机不允许同时使用两个接口,但可以通过应用程序开发来完成。我开发了一个Windows下载加速器,它同时使用WIFI和以太网接口进行TCP连接。

这两个接口只能用于TCP连接,具有两个不同的IP地址。您可以为Android手机开发应用程序,该应用程序将首先以字节为单位确定文件大小,并在每个接口上发送字节请求。请记住,在并发接口中无法进行UDP连接。


0
投票

您可以使用requestRouteToHost API进行路由,即如果您知道存储视频的主机地址,则可以按如下方式进行视频下载:

    ConnectivityManager connManager = null;

    if(mContext != null) {
        connManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo[] netInfos = connManager.getAllNetworkInfo();
        for(int loop_index=0;loop_index<netInfos.length;loop_index++){          
            switch(netInfos[loop_index].getType())
            {
            case ConnectivityManager.TYPE_MOBILE_HIPRI:
                if(netInfos[loop_index].getState()== NetworkInfo.State.CONNECTED){
                    connectionSet = connManager.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI, lookupHost("Video Stored Address"));
                }
                break;

            case ConnectivityManager.TYPE_WIFI:
                if(netInfos[loop_index].getState()== NetworkInfo.State.CONNECTED)

                break;

            default:
                if(netInfos[loop_index].getState()== NetworkInfo.State.CONNECTED)

                break;
            }
        }
    }

private static int lookupHost(String hostname) {
    InetAddress inetAddress;
    try {
        inetAddress = InetAddress.getByName(hostname);
    } catch (UnknownHostException e) {
        return -1;
    }
    byte[] addrBytes;
    int addr;
    addrBytes = inetAddress.getAddress();
    addr = ((addrBytes[3] & 0xff) << 24)
            | ((addrBytes[2] & 0xff) << 16)
            | ((addrBytes[1] & 0xff) << 8)
            |  (addrBytes[0] & 0xff);
    return addr;
}
© www.soinside.com 2019 - 2024. All rights reserved.