2011-11-04 16 views
5

क्या मैं प्रोग्राममैटिकल व्हील की जांच कर सकता हूं एंड्रॉइड डिवाइस को टेदरिंग सक्रिय किया गया है?क्या टेदरिंग सक्रिय है या नहीं यह जांचने का कोई तरीका है?

मैंने अभी वाईफाईमेनगर वर्ग देखा है। WifiInfo से सभी vatraibles वही मान दिखाते हैं जैसे iff डिवाइस पर WIFI बंद है।

Thnaks, सादर

+0

टेदरिंग कार्यक्षमता कॉन में है ctivity प्रबंधक वर्ग, लेकिन सार्वजनिक एपीआई में छुपा और नहीं। यदि आप "अप्रकाशित एपीआई" का उपयोग करना चाहते हैं तो आपको संशोधित ढांचे की आवश्यकता होगी या प्रतिबिंब का उपयोग करें। जिस विधि को आप ढूंढ रहे हैं वह शायद स्ट्रिंग है [] कनेक्टिविटी मैनेजर # getTetheredIfaces(), जो वर्तमान में tethered नेटवर्क इंटरफेस देता है। – Jens

उत्तर

7

प्रतिबिंब का उपयोग कर प्रयास करें, तो जैसे:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
Method[] wmMethods = wifi.getClass().getDeclaredMethods(); 
for(Method method: wmMethods){ 
if(method.getName().equals("isWifiApEnabled")) { 

try { 
    method.invoke(wifi); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    e.printStackTrace(); 
} 
} 

(यह रिटर्न एक Boolean)


के रूप में डेनिस सुझाव दिया कि यह इस का उपयोग करने के लिए बेहतर है:

final Method method = manager.getClass().getDeclaredMethod("isWifiApEnabled"); 
    method.setAccessible(true); //in the case of visibility change in future APIs 
    return (Boolean) method.invoke(manager); 

+0

आपको बहुत धन्यवाद! – softwaresupply

+0

सभी घोषित विधियों को फिर से शुरू करने की कोई आवश्यकता नहीं है: कक्षा वर्ग में "getDeclaredMethod" विधि है। मेरे उत्तर में कोड देखें। –

5

पहले (प्रबंधक WiFiManager है), तो आप WifiManager प्राप्त करने की आवश्यकता: फिर

Context context = ... 
final WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 

:

public static boolean isSharingWiFi(final WifiManager manager) 
{ 
    try 
    { 
     final Method method = manager.getClass().getDeclaredMethod("isWifiApEnabled"); 
     method.setAccessible(true); //in the case of visibility change in future APIs 
     return (Boolean) method.invoke(manager); 
    } 
    catch (final Throwable ignored) 
    { 
    } 

    return false; 
} 

इसके अलावा, आप को AndroidManifest.xml में अनुमति का अनुरोध करने की जरूरत है:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
+0

सभी फाइनल का उद्देश्य क्या है? क्या इन्हें कुछ मामलों में जरूरी है? – diedthreetimes

+0

@diedthreetimes: "सभी फाइनल का उद्देश्य क्या है? क्या इन्हें कुछ मामलों में जरूरी है?" - कोडिंग शैली, प्रत्येक को स्वयं। देखें [क्या मुझे अंतिम उपयोग करना चाहिए] (https://programmers.stackexchange.com/q/48413/158721) और [अंतिम दुरुपयोग] (https://programmers.stackexchange.com/q/98691/158721)। – Daniel

+0

थोड़ा सा अतिरिक्त: किसी को यह जांचना चाहिए कि "getSystemService" शून्य हो गया है या नहीं। –

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

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