setProcessDefaultNetworkをwifiにした後、ネットワークがモバイルに戻ると、この方法で大きなデータを送信することはできません。この方法で作成されたすべてのソケットが機能しなくなるためです。私は今、完璧な方法を見つけることができません、ここに参照用です。
あなたがrootアクセスを得ることができます1.If、前に無線LANに接続し、この操作を行います。
Process process = runtime.exec("su");
DataOutputStream dataOutputStream = new DataOutputStream(process.getOutputStream());
dataOutputStream.writeBytes("settings put global captive_portal_server 127.0.0.1\n");
dataOutputStream.writeBytes("exit\n");
dataOutputStream.flush();
int status = process.waitFor();
そして、あなたがデータ送信した後、それを削除します。
dataOutputStream.writeBytes("settings delete global captive_portal_server\n");
をあなたはWRITE_SECURE_SETTINGSの許可を得ることができます2.Ifは:
Settings.Global.putString(getContentResolver(),"captive_portal_server","127.0.0.1");
または:
これが機能するには、マニフェストに ' 'が必要です。 –
AppleGrew
@hygorxaraujo私はあなたのコードを使用していますが、これはandroid nougatでは動作しません。私はMarshamallow以上のためにmanager.bindProcessToNetwork(ネットワーク)をやっています。回避策はありますか? –
@ satpal002申し訳ありませんが、私はAndroid Marshmallowまでこのコードを使用しました(テストするためにNougatを搭載したデバイスはありません)。 https://developer.android.com/reference/android/net/ConnectivityManager.htmlの動作を停止するために、APIに変更が加えられていることに気付かなかった。以前のバージョン(Lollipopの上)で正常に動作していますか? – hygorxaraujo