2011-12-20 17 views
13

पर मैं एंड्रॉइड 4.0 पर Google से नया वाई-फाई डायरेक्ट एपीआई का उपयोग कर रहा हूं और नमूना कोड में वे वाईफाई-डायरेक्ट मोड को सक्रिय करने के लिए उपयोगकर्ता को सेटिंग्स पर भेजते हैं।क्या मैं कोड से वाईफाई-डायरेक्ट चालू कर सकता हूं? एंड्रॉइड एपीआई -14 (आईसीएस)

क्या कोड द्वारा इसे शुरू करने का कोई तरीका है ???

सब वे प्रदान करते हैं आशय WIFI_P2P_STATE_CHANGED_ACTION को सुनने के लिए, और फिर इस कोड

String action = intent.getAction(); 

if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { 

    // UI update to indicate wifi p2p status. 
    int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); 

    if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) { 
     // Wifi Direct mode is enabled 

    } else { 
     // Wifi Direct mode is disabled 
    } 
+1

अगर यह 4.0 पर काम करता है पता नहीं है, लेकिन पिछले पर काम करता है: http: // www .tutorialforandroid.com/200 9/10/turn-off-turn-on-wifi-in-android-using.html – Carlos

उत्तर

13

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

p2pManager = (WifiP2pManager) getSystemService(WIFI_P2P_SERVICE); 
channel = p2pManager.initialize(getApplicationContext(), 
     getMainLooper(), null); 

try { 
    Class<?> wifiManager = Class 
      .forName("android.net.wifi.p2p.WifiP2pManager"); 

    Method method = wifiManager 
      .getMethod(
       "enableP2p", 
       new Class[] { android.net.wifi.p2p.WifiP2pManager.Channel.class }); 

    method.invoke(p2pManager, channel); 

} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

कृपया ध्यान दें:

Jelly Bean पर और ऊपर, जब आप का उपयोग करने के WifiP2pManager एपीआई, वाईफ़ाई प्रत्यक्ष स्वचालित रूप से सक्षम किया गया है (जब तक वाईफ़ाई पर है), इसलिए कोई कोशिश इस हैक का उपयोग करने की आवश्यकता है।

+0

मैं जेबी और उससे ऊपर (कम से कम एओएसपी पर) उस वाईफाई को सीधे जोड़ना चाहता हूं - यह केवल हर समय सक्रिय नहीं होता है - यह केवल प्रतीत होता है । यदि आप श्रोताओं को सीधे वाईफाई के लिए देखते हैं, तो यह कुछ समय बाद बंद हो जाता है। हालांकि, यदि आप वाईफ़ाई प्रत्यक्ष मेनू खोलते हैं, तो यह स्वयं वापस आ जाता है। हो सकता है कि हो सकता है कि मेजबान एक सहकर्मी खोज करे या खुद को ढूंढने में सक्षम हो। एक बैटरी बचत चाल की संभावना है। मैंने यह भी पाया है कि यह अवरुद्ध है, क्योंकि यह एक कनेक्शन स्वीकार करता है, इसलिए पूरी प्रणाली लॉक हो जाएगी और कभी-कभी कनेक्ट होने में असफल हो जाएगी। (सिस्टम निमंत्रण) – Mgamerz

+0

और एक और चीज़ जोड़ें: यह कोड केवल तभी काम करता है जब वाईफाई इसके साथ शुरू हो रहा है। मेरा फोन (एलजी मैक 4.0.4) अगर यह बंद हो जाता है तो विधि नहीं मिलती है, लेकिन यह पहले से चालू होने पर खूबसूरती से काम करती है। – Mgamerz

+0

@Mgamerz Wierd, जीएसआईआई पर यह काम करता है जब वाईफ़ाई चालू या बंद होता है (यदि इसका बंद हो जाता है तो यह स्वचालित रूप से चालू हो जाता है लेकिन वास्तव में काम करने में कुछ सेकंड लगते हैं हालांकि विधि सीधे लौटती है) –

2

नहीं उपयोग करते हैं, सब तुम कर सकते हो उपयोगकर्ता वाईफाई चालू करने के लिए सूचित है।

+0

क्या यह जांचने का कोई तरीका है कि यह इरादे के इंतजार किए बिना है या नहीं? - उदाहरण के लिए यदि उपयोगकर्ता मेरे ऐप को चलाने से पहले चालू हो गया है .... – zaxy78

0

कुछ उपकरणों पर, भले ही वाई-फाई प्रत्यक्ष समर्थित है, यह कुछ सिस्टम कीड़े के कारण सक्षम नहीं है। कोटलिन का उपयोग करके यह जांचने के लिए एक और विश्वसनीय तरीका है कि यह सक्षम है (दुर्भाग्यवश इसे रूट की आवश्यकता है)।

val matcher = "^mNetworkInfo .* (isA|a)vailable: (true|false)" 
    .toPattern(Pattern.MULTILINE) 
    .matcher(su("dumpsys ${Context.WIFI_P2P_SERVICE}")) 
if (!matcher.find()) return "Root unavailable" 
if (matcher.group(2) != "true") return "Wi-Fi Direct unavailable" 
return "Wi-Fi Direct available" 

यह एंड्रॉइड 4.3 - 8.1 के लिए काम करना चाहिए। नीचे दिए गए चेक स्रोत कोड:

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