私のアプリがWiFiネットワークに接続しているときにネットワークサービスを実行中に問題が発生しました。 私はONL BroadcastServiceAndroidマシンがネットワークに接続されていません
public void registerService() {
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setServiceName(mServiceName);
serviceInfo.setServiceType("_http._tcp.");
serviceInfo.setPort(openPort());
mNsdManager = (NsdManager) mContext.getSystemService(Context.NSD_SERVICE);
mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
}
private int openPort() {
try{
// Line that throws the exception
return new ServerSocket(0).getLocalPort();
}catch (IOException ioe){
Crashlytics.logException(ioe);
ioe.printStackTrace();
return 0;
}
}
このブロードキャストレシーバー
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {
welcomeService = new BroadcastService(context, "Welcome");
Log.i(TAG, "onReceive: SUPPLICANT-STATE ---> Connected");
//do something
if (!serviceRegistered) {
welcomeService.registerService();
serviceRegistered = true;
}
}
if (networkInfo.getState() == NetworkInfo.State.DISCONNECTED) {
Log.i(TAG, "onReceive: SUPPLICANT-STATE ---> Disconnected");
//do something
unRegisterService();
}
}
}
public void unRegisterService() {
if (serviceRegistered && welcomeService != null) {
welcomeService.unregisterService();
serviceRegistered = false;
}
}
BroadcastReceiver
怒鳴るopenPort()メソッドでは、次の例外
java.net.SocketException: socket failed: ENONET (Machine is not on the network)
を取得していますメインアクティビティが表示されているときにyが実行されます。それは最初の実行で正常に動作しますが、私はWiFiネットワークを変更するとこれが起こります。ヘルプの世界は非常に高く評価されます。
同じ問題に直面しています –
@NinadKambliはネットワークにインターネット接続を持っていますか?私の問題はインターネットのないネットワークに接続したために発生し、アンドロイドは3/4G接続を使用することを選択しました。代わりに、私が通信しようとしているデバイスが届かないところに – Lonergan6275
問題が解決しました。 Wi-Fiのネットがダウンしていてもユーザーがモバイルデータに接続しているときに無効にすることを忘れていたとしても、Wi-Fiでデータを送信するようにデバイスを制限していました。 –