2012-03-28 5 views
7

ここでは、プログラムでUSBテザリングを有効にする方法を尋ねているので、ここで多くの質問を読んでいます。Android - プログラムでUSBテザリングを有効にする - 2.3のためのアプリがあります

答えは常に同じですが、通常のアプリケーションはそれを行うことはできません、システムアプリケーションだけです。

しかし、2.3の場合は、市場でそれを行うアプリをダウンロードすることができます。 ICS(アンドロイド4.0.3)で

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

それはもはや機能しません。

彼らは2.3のためにどのようにしましたか? 4.0でも可能ですか?

+0

"答えは常に同じで、通常のアプリケーションではできません。システムアプリだけです。" - より正確には、Android SDKにUSBテザリングを管理するものは何もありません。 – CommonsWare

+1

はい、そのアプリはどのように管理しましたか?それはSDKにないかもしれませんが、確かに可能です!それは汚いトリックでしたか?悪用?おそらく4.0にパッチが当てられたでしょうか? –

答えて

8

次のコードを使用すると、USBテザリングを有効にすることができます。私は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

これをどのデバイスでテストしましたか?私のSamsung Galaxy S IIには「usb0」インターフェースはありません。 (netcfgによると) –

+0

はあなたのSamsung S IIにICSがありますか?私はICSを除いて、多くのデバイスでテストしており、すべてのデバイスで動作します。 –

+1

ええ、それはICSを持っています。この変更はICSで行われましたか? –

6

ICS以上:反射法を実行する、アプリケーションがWRITE_SECURE_SETTINGS許可を必要とするであろう。

電話機がルートされていない限り、これは利用できません。

+0

ありがとう、それをチェックアウトし、あなたに知らせてください。 –

+3

これは最初の問題です。 01-17 22:29:40.983:E/Tethering(2632):未知数iface:usb0を無視して 私のHTC Sensationでは、実際にはusb0ではなくrndis0でした! – 3c71

2

これは、このトピックのGoogleの結果で最も人気のあるページの1つで、使用可能なインターフェイスを確認している自分のコードを提供したいと考えています。それは私が持っているジンジャーブレッドの携帯電話で動作しますが、私のギャラクシーS3は動作しません。

// 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

Samsumg Galaxy Tab 2 10.1では、インターフェイスは「usb0」ではなく「rndis0」と呼ばれています。おそらくGalaxy SIIと同じです

1

ポート "rndis0"は、Tetherableインターフェイスリストでは使用できないように動的に有効になっています。 ユーザーがメニューでUSBテーピングオプションを選択したときに追加されます。 オプションが選択されると、ConnectivityManager :: setUsbTethering(bool)関数が呼び出されます。また、この関数呼び出しはシステムアプリケーションに対してのみ許可されています。

関連する問題