2016-11-07 5 views
5

मुझे कोई समस्या है जब मेरा ऐप वाईफाई नेटवर्क से कनेक्ट होता है तो नेटवर्क सेवा चलाना। मैं एक निम्न अपवाद विधि OpenPort() में bellowएंड्रॉइड मशीन नेटवर्क पर नहीं है

@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; 

    } 
} 

BroadcastService

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; 
    } 
} 

यह प्रसारण रिसीवर onl हो रही है,

java.net.SocketException: socket failed: ENONET (Machine is not on the network) BroadcastReceiver जब मुख्य गतिविधि दिख रही है तो y चलता है। और यह पहले रन पर ठीक काम करता है लेकिन जब मैं वाईफाई नेटवर्क बदलता हूं तो ऐसा होता है। दुनिया की बहुत सराहना की मदद करें।

+0

एक ही समस्या का सामना कर रहे हैं –

+0

@NinadKambli नेटवर्क का इंटरनेट कनेक्शन है। क्योंकि मेरी समस्या किसी इंटरनेट से नेटवर्क से जुड़कर हुई थी और एंड्रॉइड 3/4 जी कनेक्शन का उपयोग करने के लिए चुने गए थे, जहां डिवाइस मैं जिस संवाद के साथ संवाद करने की कोशिश कर रहा हूं वह पहुंच योग्य नहीं है – Lonergan6275

+0

समस्या हल हो गई है। मैं वाईफाई के माध्यम से डेटा भेजने के बावजूद वाईफाई के माध्यम से डेटा भेजने के लिए अपने डिवाइस को सीमित कर रहा था और जब उपयोगकर्ता मोबाइल डेटा से कनेक्ट होता है तो मैं इसे अक्षम करना भूल गया था। –

उत्तर

0

सेवा का उपयोग करें जो नेटवर्क शुरू होने पर या नेटवर्क बंद होने पर सेवा शुरू करने और सेवा बंद करने के लिए सेवा का उपयोग करें। उसी पोर्ट को भी जांचें जो पहले रिलीज का उपयोग कर रहा है और उस बंदरगाह का उपयोग करने के बाद। onStartCommand() में जो भी कार्य आप चाहते हैं उसे करें।

@Override 
public void onReceive(Context context, Intent intent) { 
    Date now = new Date(); 
    Long time = now.getTime(); 
    String action = intent.getAction(); 



    NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 

    if (networkInfo.getState() == NetworkInfo.State.CONNECTED) { 


    boolean check = isMyServiceRunning(context, 
    service.getName()); 
    if (check) { 
     Intent i = new Intent(sqlitewraper.context,service.class); 
     stopService(i); 
    } 
    else{ 
     Intent i = new Intent(sqlitewraper.context,service.class); 
     startservice(i); 

    } 

    } 

    if (networkInfo.getState() == NetworkInfo.State.DISCONNECTED) { 

    boolean check = isMyServiceRunning(context, 
    service.getName()); 
    if (check) { 
     Intent i = new Intent(sqlitewraper.context,service.class); 
     stopService(i); 
    } 
    } 


    private boolean isMyServiceRunning(Context context, String Myservice) { 
    ActivityManager manager = (ActivityManager) context 
    .getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager 
    .getRunningServices(Integer.MAX_VALUE)) { 
     if (Myservice.equals(service.service.getClassName())) { 

     return true; 
     } 
    } 
    return false; 
    } 
} 
+0

आपके उत्तर के लिए धन्यवाद लेकिन क्या आप इसे अधिक विस्तार से समझा सकते हैं या उदाहरण दे सकते हैं – Lonergan6275

+0

मैं नहीं देखता कि यह 'नई सर्वर सॉकेट (0) .getLocalPort() के साथ समस्या को कैसे संबोधित करता है; ' – Lonergan6275

+0

रिलीज संसाधनों के कारण यह पहले से ही है सेवा शुरू होने पर आवंटित किया जाता है यदि आप नेटवर्क बंद करते समय सेवा बंद कर देते हैं तो इसके रिलीज संसाधन जो पहले ही आवंटित किए जाते हैं। –

संबंधित मुद्दे