3GデータセッションとWIFIDirectは同時に機能しますか?もしそうなら、2つのIPアドレスが存在します、それは混乱を引き起こしますか?一例:
3Gを使用してビデオファイルをダウンロードすると、進行状況は50%になります。次に、Aが画像を選択し、WIFIDirectを使用してBと共有します。これは、ビデオファイルのダウンロードを中断することなく成功しますか?WIFI接続が正常であるとすると、Aは2つのIPアドレスを持ち、画像共有ではどのIPアドレスが使用されますか?
3GデータセッションとWIFIDirectは同時に機能しますか?もしそうなら、2つのIPアドレスが存在します、それは混乱を引き起こしますか?一例:
3Gを使用してビデオファイルをダウンロードすると、進行状況は50%になります。次に、Aが画像を選択し、WIFIDirectを使用してBと共有します。これは、ビデオファイルのダウンロードを中断することなく成功しますか?WIFI接続が正常であるとすると、Aは2つのIPアドレスを持ち、画像共有ではどのIPアドレスが使用されますか?
3G がオンのときに Galaxy Nexus で独自の WiFi Direct アプリケーションを実行していますが、これまでのところ問題は発生していません。これは、WiFi Direct アプリケーションが android.net.wifi.p2p パッケージを使用しているためです。3G 経由で IP を取得すると、android.net.wifi パッケージが使用されます。したがって、デバイスで使用できる 2 つの異なる IP アドレスが存在する可能性があります。写真の共有には、ローカル IP が使用されます。
WiFiをオンにすると、自動的に3Gがオフになり、デフォルト接続としてWiFiが使用されるため、2つの同時接続は可能ではないと思います. そしてその逆です。
少なくともこれは、私のすべての Android スマートフォンで見られる動作です。
3G Data Session と WIFI Direct は同時に動作できますか?? はい...働くことができます
これは、ビデオ ファイルのダウンロードを中断せずに成功しますか?? はい..
写真の共有では、どの IP アドレスが使用されますか? ローカルIPだと思います。チェックしていませんが
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;
}