2016-11-22 9 views
6

मैं इंटरनेट कनेक्शन के बिना वाईफाई नेटवर्क से कनेक्ट करने के लिए निम्न कोड का उपयोग कर रहा हूं, क्योंकि यह अपना स्वयं का वेब-सर्वर होस्ट करता है जहां मैं इंटरनेट कनेक्शन उपलब्ध होने पर भी कनेक्ट करना चाहता हूं।इंटरनेट प्रोग्राम के बिना वाईफ़ाई से कनेक्ट करें

WifiConfiguration wifiConfiguration = new WifiConfiguration(); 
wifiConfiguration.SSID = String.format("\"%s\"", scanResult.SSID); 
wifiConfiguration.preSharedKey = String.format("\"%s\"", "secret"); 

int netId = wifiManager.addNetwork(wifiConfiguration) 
wifiManager.disconnect(); 
wifiManager.enableNetwork(netId, true); 
wifiManager.reconnect(); 

यह Android Marshmallow नीचे हर डिवाइस पर ठीक काम करता है (मैं CM13 उपयोग कर रहा हूँ, तो यह हो सकता है CyanogenMod से संबंधित है?): जब मैं कनेक्ट करने के लिए इस कोड का उपयोग, एंड्रॉयड अभी भी मोबाइल कनेक्शन का उपयोग करता है और निशान एक विस्मयादिबोधक चिह्न के साथ वाईफाई प्रतीक। सेकेंड बाद में यह सवाल के साथ एक अधिसूचना दिखाता है अगर मैं जुड़े रहना चाहता हूं, क्योंकि नेटवर्क का कोई इंटरनेट कनेक्शन नहीं है।

समस्या: मेरा ऐप स्वचालित रूप से मेरे वेब-सर्वर से कनेक्ट होने का प्रयास करता है जो विफल रहता है, क्योंकि स्पष्ट रूप से कोई इंटरनेट कनेक्शन नहीं है। बेशक यह तब तक इंतजार करना संभव होगा जब तक कि मैं अपने वेब-सर्वर तक नहीं पहुंच पाता, लेकिन इसे उपयोगकर्ता इंटरैक्शन के बिना काम करना चाहिए।

क्रोमकास्ट या कोई अन्य आईओटी डिवाइस कैसे हल करता है? जब मैंने अपना क्रोमकास्ट डिवाइस स्थापित किया था तो मैंने कभी इस तरह की एक अधिसूचना नहीं देखी।

+0

आप समाधान इस में @KodeMechanic द्वारा दिए गए करके देख सकते हैं [अतः पोस्ट] (http://stackoverflow.com/a/27370352) जिसमें उन्होंने सेटअप करने के लिए यह प्रयोग किया जाता है एक का उपयोग कर Chromecast में पीसी से कास्ट करने के लिए मोबाइल वायरलेस कनेक्शन। 'क्रोमकास्ट -> स्थानीय राउटर -> पीडीएनेट के साथ पीसी -> यूएसबी फॉक्सफ़ी ऐप इंस्टॉल के साथ मोबाइल फोन से कनेक्ट करें। – Teyam

+0

इसके अतिरिक्त, आप इस [थ्रेड] (https://www.reddit.com/r/LifeProTips/comments/38sb3v/lpt_use_chromecast_without_internetmobile_data_by/crxfse8/) में इंटरनेट डेटा के बिना Chromecast को सेटअप और उपयोग करने के चरणों को भी जांचना चाह सकते हैं। आशा है कि आपके लिए भी काम करता है! – Teyam

+1

क्रोमकास्ट यहां एक उदाहरण है कि यह काम कर रहा है। मैं इस संदेश के बिना एक कस्टम वाईफाई एक्सेसपॉइंट को कार्यान्वित करना चाहता हूं कि क्रोमकास्ट की तरह कोई इंटरनेट कनेक्शन नहीं है :) इसमें क्रोमकास्ट के साथ बिल्कुल कुछ नहीं है। – ForJ9

उत्तर

6

मैंने कनेक्टिंग नेटवर्क पर वर्तमान प्रक्रिया को बाध्यकारी (connectivityManager.bindProcessToNetwork(network);) द्वारा हल किया। यह "इस नेटवर्क का उपयोग करते रहें" संवाद को रोकता है और आपको वाईफाई पर डिवाइस के साथ संवाद करने की अनुमति देता है।

NetworkRequest.Builder builder; 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    builder = new NetworkRequest.Builder(); 
    //set the transport type do WIFI 
    builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); 

    connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() { 
     @Override 
     public void onAvailable(Network network) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if (Build.VERSION.RELEASE.equalsIgnoreCase("6.0")) { 
        if (!Settings.System.canWrite(mActivity)) { 
         Intent goToSettings = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); 
         goToSettings.setData(Uri.parse("package:" + mActivity.getPackageName())); 
         mActivity.startActivity(goToSettings); 
        } 
       } 
       connectivityManager.bindProcessToNetwork(null); 
       if (mSsid.contains("my_iot_device-xxxxxxxxx")) { 
        connectivityManager.bindProcessToNetwork(network); 
       } else { 

       } 

      } else { 
       //This method was deprecated in API level 23 
       ConnectivityManager.setProcessDefaultNetwork(null); 
       if (mSsid.contains("my_iot_device-xxxxxxxxx")) { 
        ConnectivityManager.setProcessDefaultNetwork(network); 
       } else { 

       } 

      } 
      try { 
       //do a callback or something else to alert your code that it's ok to send the message through socket now 
      } catch (Exception e) { 
       Crashlytics.logException(e); 
       e.printStackTrace(); 
      } 
      connectivityManager.unregisterNetworkCallback(this); 
     } 
    }); 
} 
+0

मुझे कनेक्शन स्थापित करने में समस्या आ रही है। [http://stackoverflow.com/questions/41712432/connecting-to-wifi-network-automatically-in-android-5-and-6] (मेरा प्रश्न देखें) कोई पॉइंटर्स? – user2489122

+1

"ACTION_MANAGE_WRITE_SETTINGS" क्यों आवश्यक है? यह 6.0 के लिए विशिष्ट क्यों है? – Easypeasy

+0

क्या किसी ने एंड्रॉइड 8 पर यह कोशिश की है? –

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