从代码启动/停止内置Wi-Fi / USB网络共享?

时间:2010-08-08 22:12:22

标签: android wifi android-2.2-froyo

如何从我的应用程序启动或停止Android 2.2中的内置网络共享?

4 个答案:

答案 0 :(得分:7)

ConnectivityManager中有一个非公开的Tethering API。如上所示,您可以使用反射来访问它。我在许多Android 2.2手机上试过这个,它适用于所有这些(我的HTC打开了网络共享,但没有在状态栏中显示...,所以从另一端检查)。下面是一些粗略的代码,它们发出调试内容并打开usb0上的tethering。

ConnectivityManager cman = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

Method[] methods = cman.getClass().getDeclaredMethods();
for (Method method : methods) {
    if (method.getName().equals("getTetherableIfaces")) {
        try {
            String[] ifaces = (String[]) method.invoke(cman);
            for (String iface : ifaces) {
                Log.d("TETHER", "Tether available on " + iface);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (method.getName().equals("isTetheringSupported")) {
        try {
            boolean supported = (Boolean) method.invoke(cman);
            Log.d("TETHER", "Tether is supported: " + (supported ? "yes" : "no"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (method.getName().equals("tether")) {
        Log.d("TETHER", "Starting tether usb0");
        try {
            int result = (Integer) method.invoke(cman, "usb0");
            Log.d("TETHER", "Tether usb0 result: " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

请注意:此代码需要以下权限才能运行:

android.permission.ACCESS_NETWORK_STATE
android.permission.CHANGE_NETWORK_STATE

答案 1 :(得分:3)

我回答了这个问题here。简而言之,可能,这是代码:

private void setWifiTetheringEnabled(boolean enable) {
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);

    Method[] methods = wifiManager.getClass().getDeclaredMethods();
    for (Method method : methods) {
        if (method.getName().equals("setWifiApEnabled")) {
            try {
                method.invoke(wifiManager, null, enable);
            } catch (Exception ex) {
            }
            break;
        }
    }
}

您的应用应具有以下权限:

  

android.permission.CHANGE_WIFI_STATE

答案 2 :(得分:0)

Android SDK中没有用于管理网络共享的公共API - 抱歉!

答案 3 :(得分:0)

我使用了来自Android How to turn on hotspot in Android Programmatically的代码!我为Android 4.2启用了便携式热点。这是代码。

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// TODO Auto-generated method stub
WifiConfiguration wifi_configuration = null;
wifiManager.setWifiEnabled(false);

try 
{
  //USE REFLECTION TO GET METHOD "SetWifiAPEnabled"
Method method=wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
method.invoke(wifiManager, wifi_configuration, true);
} 
catch (NoSuchMethodException e){
// TODO Auto-generated catch block
  e.printStackTrace();
}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();
}