1.点击网络共享菜单处理流程
类:TetherSettings.java
public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if (preference == mUsbTether) {
if (!mUsbTethering) {
boolean newState = mUsbTether.isChecked();
/// M: update usb tethering @{
mUsbTether.setEnabled(false);
mTetherSettingsExt.updateUsbTypeListState(false);
mUsbTethering = true;
mUsbTetherCheckEnable = false;
if (newState) {
mUsbTetherDone = false;
} else {
mUsbUnTetherDone = false;
}
mUsbTetherFail = false;
Log.d(TAG, "onPreferenceTreeClick - setusbTethering(" + newState +
") mUsbTethering: " + mUsbTethering);
/// @}
if (newState) {
startProvisioningIfNecessary(TETHERING_USB);//若新状态位true,开始网络共享
} else {
if (TetherUtil.isProvisioningNeeded(getActivity())) {
TetherService.cancelRecheckAlarmIfNecessary(getActivity(), TETHERING_USB);
}
setUsbTethering(newState);//设置新的usb网络共享选项状态
}
} else {
return true;
}
}
===========》
private void startProvisioningIfNecessary(int choice) {
mTetherChoice = choice;
if (TetherUtil.isProvisioningNeeded(getActivity())) {//弹出对话框让用户选择允许
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName(mProvisionApp[0], mProvisionApp[1]);
intent.putExtra(TETHER_CHOICE, mTetherChoice);
startActivityForResult(intent, PROVISION_REQUEST);
} else {
startTethering();//开始共享网络的方法
}
}
===========》
private void startTethering() {
switch (mTetherChoice) {
.....
case TETHERING_USB: //TETHERING_USB选选等于USB网络共享
setUsbTethering(true);//
break;
}
}
===========》 //到此还是没发现网络是怎么共享出去的
private void setUsbTethering(boolean enabled) {
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//M: move mUsbTether.setChecked(false) as CR ALPS00449289
if (cm.setUsbTethering(enabled) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
mUsbTether.setChecked(false);
mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
return;
}
mUsbTether.setSummary("");
}
===========》下面看看ConnectivityManager.java的 setUsbTethering(enabled)方法:
public int setUsbTethering(boolean enable) {
try {
return mService.setUsbTethering(enable);//连接服务器类设置共享位true
} catch (RemoteException e) {
return TETHER_ERROR_SERVICE_UNAVAIL;
}
}
}
===========》看 ConnectivityService类:
public int setUsbTethering(boolean enable) {
ConnectivityManager.enforceTetherChangePermission(mContext);
if (isTetheringSupported()) {
return mTethering.setUsbTethering(enable);//mTethering为Tethering类对象
} else {
return ConnectivityManager.TETHER_ERROR_UNSUPPORTED;
}
}
===========》查看Tethering类:
public int setUsbTethering(boolean enable) {
if (VDBG) Log.d(TAG, "setUsbTethering(" + enable + ")");
UsbManager usbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
int value ;
synchronized (mPublicSync) {
/** M: ALPS00233672 */
mUsbTetherEnabled = enable;
/** M: for bug solving, ALPS00331223 */
mTetheredFail = false ;
if (enable) {
mTetherDone = false ;
if