2012-03-28 8 views
7

के लिए किया गया है। मैंने SO पर कई प्रश्न पढ़े हैं जो पूछते हैं कि USB टेदरिंग प्रोग्रामेटिक रूप से कैसे सक्षम करें।एंड्रॉइड - यूएसबी टेदरिंग प्रोग्रामेटिक रूप से सक्षम करें - इसमें एक ऐप है जो 2.3

उत्तर हमेशा एक ही है, सामान्य अनुप्रयोग इसे नहीं कर सकते हैं, केवल सिस्टम ऐप्स।

अभी तक 2.3 के लिए आप बाजार में एक ऐप डाउनलोड कर सकते हैं जो आपके लिए यह करेगा।

https://play.google.com/store/apps/details?id=org.tdtran.autousbtethering

आईसीएस पर (एंड्रॉयड 4.0.3) यह अब काम करता है।

उन्होंने 2.3 के लिए यह कैसे किया? क्या यह 4.0 के लिए भी संभव है?

+0

"उत्तर हमेशा एक ही होता है, सामान्य अनुप्रयोग इसे नहीं कर सकते हैं, केवल सिस्टम ऐप्स।" - अधिक सटीक रूप से, यूएसबी टेदरिंग का प्रबंधन करने के लिए एंड्रॉइड एसडीके में कुछ भी नहीं है। – CommonsWare

+1

हां, तो यह ऐप इसे कैसे प्रबंधित करता है? यह एसडीके में नहीं हो सकता है लेकिन यह निश्चित रूप से संभव है! क्या यह एक गंदे चाल थी? एक शोषण? शायद यह 4.0 में पैच किया गया था? –

उत्तर

8

निम्न कोड का उपयोग करके आप यूएसबी टेदरिंग सक्षम कर सकते हैं। मैंने 4.0 में परीक्षण नहीं किया।

public void switchOnTethering() { 

       Object obj = getSystemService(Context.CONNECTIVITY_SERVICE); 
       for (Method m : obj.getClass().getDeclaredMethods()) { 

        if (m.getName().equals("tether")) { 
         try { 
          m.invoke(obj, "usb0"); 
         } catch (IllegalArgumentException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (IllegalAccessException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (InvocationTargetException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
       } 
     } 
+0

आपने किस डिवाइस पर इसका परीक्षण किया? मेरे सैमसंग गैलेक्सी एस II में "यूएसबी 0" इंटरफ़ेस नहीं है। (Netcfg के अनुसार) –

+0

क्या आपके सैमसंग एस II में आईसीएस है? मैंने आईसीएस को छोड़कर और सभी उपकरणों में काम करने के अलावा कई उपकरणों में परीक्षण किया है। –

+1

हाँ, इसमें आईसीएस है। क्या आईसीएस में यह बदलाव आया? –

6

आईसीएस और इसके बाद के संस्करण: प्रतिबिंब विधि पर अमल करने के लिए, आवेदन WRITE_SECURE_SETTINGS अनुमति की आवश्यकता होगी।

यह तब तक उपलब्ध नहीं है जब तक कि फोन रूट न हो जाए।

+0

धन्यवाद, इसे जांच लेंगे और आपको बताएंगे। –

+3

यह केवल पहली समस्या है। फिर आपको यह मिल जाएगा: 01-17 22: 2 9: 40.983: ई/टिथरिंग (2632): एक अज्ञात आईफ़ेस टिथर करने का प्रयास किया: usb0, मेरी एचटीसी सेंसेशन पर, यह वास्तव में usb0 की बजाय rndis0 था !? – 3c71

2

चूंकि यह इस विषय के लिए Google परिणामों में सबसे लोकप्रिय पृष्ठों में से एक है, मैं उपलब्ध इंटरफेस की जांच कर रहा हूं जो अपना कोड योगदान देना चाहता हूं। यह मेरे पास एक जिंजरब्रेड फोन पर काम करता है, लेकिन मेरे गैलेक्सी एस 3 नहीं।

// DETECT INTERFACE NAME 
Log.i("UsbTethering","Detecting tetherable usb interface."); 
String[] available = null; 
ConnectivityManager connMgr = (ConnectivityManager)connectivityServiceObject; 
Method[] wmMethods = connMgr.getClass().getDeclaredMethods(); 
for(Method getMethod: wmMethods) 
{ 
    if(getMethod.getName().equals("getTetherableUsbRegexs")) 
    { 
     try 
     { 
      available = (String[]) getMethod.invoke(connMgr); 
      break; 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
// DETECT INTERFACE NAME 


if(available.length > 0) 
{  
    for(String interfaceName : available) 
    { 
     Log.i("UsbTethering", "Detected " + String.valueOf(available.length) + " tetherable usb interfaces."); 
     Log.i("UsbTethering", "Trying to " + desiredString + " UsbTethering on interface " + interfaceName + "..."); 
     Integer returnCode = (Integer)method.invoke(connectivityServiceObject, interfaceName); 
     if(returnCode == 0) 
     { 
      Log.i("UsbTethering", "UsbTethering " + desiredString + "d."); 
      return true; 
     } 
     else 
     { 
      Log.w("UsbTethering", "Failed to " + desiredString + "Usb Tethering. ReturnCode of method " + method.getName() + ": " + String.valueOf(returnCode)); 
     } 
    } 
} 
1

सैमसंग गैलेक्सी टैब 2 10.1 इंटरफ़ेस को "usb0" लेकिन "rndis0" नहीं कहा जाता है। हो सकता है कि गैलेक्सी एसआईआई

1

पोर्ट "rndis0" को तेज़हेबल इंटरफेस सूची में गतिशील रूप से उपलब्ध नहीं किया गया है। जब उपयोगकर्ता मेनू में यूएसबी टिथरिंग विकल्प का चयन करता है तो यह जोड़ा जाता है। फ़ंक्शन कनेक्टिविटी मैनेजर :: setUsbTethering (bool) को विकल्प चुना जाता है जब कॉल किया जाता है। और यह फ़ंक्शन कॉल केवल सिस्टम अनुप्रयोगों के लिए अनुमति है।

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