私のアプリケーションには、URL のループバック デバイスを介してアクセスできるローカル http サーバーが埋め込まれています: http://127.0.0.1:8080/
WiFi が有効な場合は正常に動作し、外部ネットワークがなくても (WiFi も 3G もありません) 正常に動作しますが、WiFi が無効で 3G が有効な場合は失敗します。
adb シェルを介して接続し、「netcfg」を実行すると、ループバック デバイスが常に有効になっていることがわかります。
shell@android:/ $ netcfg
...
lo UP 127.0.0.1/8 0x00000049 00:00:00:00:00:00
...
WiFiまたは3Gのオン/オフを切り替えても、「ping 127.0.0.1」は機能し続けます。
何か案が?
更新: パズルに追加します。開発用コンピューターから tcp ポートを転送します。
$ adb forward tcp:8080 tcp:8080
次に、 http://127.0.0.1:8080/を使用して PC から接続しようとします。動作しますが、Android デバイスで実行されているブラウザーを使用すると引き続き失敗します。
UPDATE 2015-06-01: 3G で作業しているときに、adb logcat で次のような関連エラーが多数表示されます。
W/ContextImpl( 504): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendStickyBroadcast:1239 com.android.server.TelephonyRegistry$3.onReceive:818 android.app.LoadedApk$ReceiverDispatcher$Args.run:788 android.os.Handler.handleCallback:725 android.os.Handler.dispatchMessage:92
と
E/CellLocation( 8336): create GsmCellLocation
Gsm アクティビティをトリガーしてループバック デバイスに接続することは、私には意味がありません。
UPDATE 2015-06-01 (2): wget を /data/data/com.XXXX.yyy/files/appFiles/bin にインストールできました
次に、「adb shell」->「run-as com.XXXX.yyy」で接続し、最後に wget -O - " http://127.0.0.1:8080/ "を実行します。
私は適切に動作するので、localhost でループバック アクセスを無効にする奇妙なセキュリティ設定を破棄できます。そのため、3G 外部プロキシを誤って使用してループバックにアクセスしようとする WebView/WebViewClient と関係があると思います。今、WebView でプロキシを無効にできるかどうか疑問に思っています。