2012-11-26 13 views
24

हाय आपकी जानकारी के लिए सभी बग रिपोर्टिंग। linkजेली बीन अंक - wifiManager.getConnectionInfo()। GetSSID() - अतिरिक्त "

समस्या विवरण:

कोड - wifiManager.getConnectionInfo().getSSID()

रिटर्न वर्तमान SSID, यह उसके चारों ओर अतिरिक्त कोटेशन के साथ वर्तमान SSID लौटने के लिए ऊपर कोड।

उदाहरण के लिए। एसएसआईडी internet"internet" के रूप में वापस कर दिया गया है।

यह केवल डिवाइस Nexus 7

का उपयोग कर इस बग हमारे अनुप्रयोग में त्रुटियाँ पैदा कर रही है के रूप में हम SSID है कि हम भी कनेक्ट करने के लिए कोशिश कर रहे हैं के साथ वर्तमान SSID तुलना Jelly Bean 4.2 पर देखा जाता है।

कोड wifiManager.getScanResults(); हालांकि कोड अभी भी सभी एसएसआईडी अतिरिक्त उद्धरण चिह्नों के बिना लौटाता है।


+0

यीप, कुछ दिन पहले इस मुद्दे का सामना करना पड़ा। सुनिश्चित नहीं है कि यह मुद्दा है या उद्देश्य के साथ बनाया गया है। आशा है कि वे इसे "ठीक" नहीं करेंगे, क्योंकि यह बहुत सारे कोड तोड़ देगा! –

+0

सैमसंग गैलेक्सी नोट 2 पर एंड्रॉइड 4.3 अपडेट के साथ एक ही समस्या। नोट 2 पर 4.1.2 संस्करण में कोई उद्धरण नहीं थे। – faizal

+0

यह एंड्रॉइड 4.4.2 –

उत्तर

30

यह एक बग और व्यवहार http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

तथाकथित बग पर प्रति प्रलेखन के रूप में सही नहीं है स्पष्ट रूप से पूर्व 4.2 उपकरणों में था, क्योंकि उन्होंने इसे "" संलग्नक के साथ वापस नहीं किया था।

एडेन की विधि एंड्रॉइड द्वारा छोड़ी गई भ्रम की वर्तमान स्थिति में मेरे लिए अच्छा लग रहा है। हालांकि, theoritically सही किया जा रहा है सिर्फ आवश्यकता होगी

if (ssid.startsWith("\"") && ssid.endsWith("\"")){ 
      ssid = ssid.substring(1, ssid.length()-1); 
} 
6

इसी समय के लिए मैं इसके आसपास हो रहा हूं, हालांकि यह बहुत अच्छा नहीं है, यह इस मुद्दे को ठीक करेगा।

public String removeQuotationsInCurrentSSIDForJellyBean(String ssid){ 
    int deviceVersion= Build.VERSION.SDK_INT; 

    if (deviceVersion >= 17){ 
     if (ssid.startsWith("\"") && ssid.endsWith("\"")){ 
      ssid = ssid.substring(1, ssid.length()-1); 
     } 
    } 

    return ssid; 

} 
4

दो बहुत ही सरल वेरिएंट:

string = string.replaceAll("^\" | \"$", ""); 

और

string = string.substring(1, string.length() - 1); 
+1

के साथ भी होता है, इनके साथ सावधान रहें क्योंकि वैध एसएसआईडी के लिए उनके भीतर उद्धरण होना संभव है यानी। "मेरा" फ्रीकिंग "वाईफाई"। इसके अलावा दूसरा बदलाव बहुत अच्छा है लेकिन आपको यह सुनिश्चित करने के लिए मेरे उत्तर में उल्लिखित चेक की आवश्यकता है कि आप किसी और चीज को गड़बड़ न करें। –

+0

@AidenFry मुझे नहीं लगता कि रेगेक्स आपके द्वारा प्रदान किए गए उदाहरण को प्रभावित करेगा, क्योंकि यह केवल प्रारंभिक चार और समापन चार (^ और $ के साथ) की जांच करता है। फ़ंक्शन केवल दस्तावेज़ के अनुसार उद्धरण या हेक्स अंकों के साथ स्ट्रिंग को वापस कर देगा, इसलिए यह केवल फ़ंक्शन द्वारा गोल किए गए उद्धरण को समाप्त करता है लेकिन मूल स्ट्रिंग के उद्धरण को बनाए रखेगा। रेगेक्स के साथ समस्या यह है कि उद्धरण के बाद/पहले ** खाली स्थान ** नहीं होना चाहिए। जैसे '("^\ "| \" $ ")' –

+0

यह साफ है, लेकिन, यह समझने में हमारी सहायता करेगा कि यह क्या करता है, अगर आप कुछ स्पष्टीकरण जोड़ते हैं। ओपी के पास कोई स्पष्ट सवाल नहीं है। – msysmilu

8

यह नियमित अभिव्यक्ति काफी साफ है:

String ssid = wi.getSSID().replaceAll("^\"(.*)\"$", "$1"); 
बस नोट्स के लिए

संपादित ° 1 (के रूप में प्रति प्रश्न टिप्पणी में) :

ओपी का वर्णन यह मुद्दा है कि कुछ उपकरणों पर एसएसआईडी getSSID() द्वारा लौटाया गया है "" में एड जबकि यह अन्य उपकरणों पर नहीं है। जैसे कुछ उपकरणों पर एसएसआईडी "MY_WIFI" है और अन्य पर यह MY_WIFI है - या जावा कोड में बोली जाती है: "\"MY_WIFI\"" और "MY_WIFI"

दोनों परिणामों को एकजुट करने के लिए मैंने " को प्रारंभ और अंत में हटाने का प्रस्ताव दिया - केवल वहां, क्योंकि " एसएसआईडी के अंदर एक कानूनी चरित्र है।ऊपर

^ नियमित अभिव्यक्ति में शुरू
$ से मतलब है
\" मतलब है " (भाग निकले)
.* कि $1

द्वारा भेजा जा सकता है
(...) एक कैप्चरिंग समूह का मतलब है वर्णों की संख्या, इसका मतलब है अंत में इसका मतलब है

तो संपूर्ण अभिव्यक्ति का अर्थ है: "<something>"<something> से $1 = <something>। यदि " अंत/प्रारंभ में नहीं है, तो नियमित अभिव्यक्ति मेल नहीं खाती है और कुछ भी नहीं बदला जाता है।

अधिक जानकारी के लिए जावा Pattern class देखें।

+0

यह * साफ * है, लेकिन, यह समझने में हमारी सहायता करेगा कि यह क्या करता है, अगर आप कुछ स्पष्टीकरण जोड़ते हैं। ओपी के पास कोई स्पष्ट सवाल नहीं है। – msysmilu

0

एक ही समस्या का सामना करना पड़ा! इस तकनीक है जो पीछे की ओर संगत है उपयोग किया:

if (suppliedSSID.equals(connectionInfo.getSSID()) || ("\"" + suppliedSSID + "\"").equals(connectionInfo.getSSID()) { DO SOMETHING }