settings app中点击使能Tether的开关进入到如下函数:
TetherSettings.java:
[java]
view plain
copy
- private
void setUsbTethering( booleanenabled) { -
ConnectivityManager cm = -
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); -
if (cm.setUsbTethering(enabled) != ConnectivityManager.TETHER_ERROR_NO_ERROR) { -
mUsbTether.setChecked(false); -
mUsbTether.setSummary(R.string.usb_tethering_errored_subtext); -
return; -
} -
mUsbTether.setSummary(""); - }
ConnectivityManager cm远程调用
[java]
view plain
copy
- public
int setUsbTethering( booleanenable) { -
enforceTetherAccessPermi ssion(); -
if (isTetheringSupported()) { -
return mTethering.setUsbTethering(enable); -
} else { -
return ConnectivityManager.TETHER_ERROR_UNSUPPORTED; -
} - }
其中mTethering是一个Tethering对象。
--Tethering.java:
[java]
view plain
copy
- public
int setUsbTethering( booleanenable) { -
if (VDBG) "setUsbTethering("Log.d(TAG, + ")");enable + -
UsbManager usbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE); -
-
synchronized (mPublicSync) { -
if (enable) { -
if (mRndisEnabled) { -
tetherUsb(true); -
} else { -
mUsbTetherRequested = true; -
usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS, false); -
} -
} else { -
tetherUsb(false); -
if (mRndisEnabled) { -
usbManager.setCurrentFunction(null, false); -
} -
mUsbTetherRequested = false; -
} -
} -
return ConnectivityManager.TETHER_ERROR_NO_ERROR; - }
mRndisEnabled表示驱动中USB Tether设备是否成功加载。该变量在以下