usb tethering 什么意思
Usb
setting 中tethering 设置流程
一 资源位置及入口文件
USB
tethering, usb_tethering_button_text
Xml/tether_prefs.xml------usb_tether_settings,布局文件
packages/apps/Settings/AndroidManifest.xml
<!-- Keep compatibility with old
shortcuts. -->
<activity-alias
android:name=".TetherSettings"
android:label="@string/tether_settings_title_all"
android:clearTaskOnLaunch="true"
android:exported="true"
android:targetActivity="Settings$TetherSettingsActivity">
<meta-data
android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.TetherSettings"
/>
<meta-data
android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
android:resource="@id/wireless_settings"
/>
<meta-data
android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
android:resource="@string/wireless_networks_settings_title"
/>
<meta-data
android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
android:value="com.android.settings.Settings$WirelessSettingsActivity"
/>
TetherSettings.java
二 触发流程
2.1
TetherSettings.java
packages/apps/Settings/src/com/android/settings/TetherSettings.java
onPreferenceTreeClick
SXlog.d(TAG,
"onPreferenceTreeClick - setusbTethering(" + newState + ")
mUsbTethering: " + mUsbTethering);
setUsbTethering(true);
下面是设置时抓取的log日志
D/TetherSettings( 543): onPreferenceTreeClick -
setusbTethering(true) mUsbTethering: true
D/Tethering(
271): setUsbTethering(true)
D/UsbDeviceManager( 271):
setCurrentFunction(rndis) default: false
W/UsbDeviceManager( 271): handleMessage:
2
W/UsbDeviceManager( 271): setEnabledFunctions:
functions = rndis
W/UsbDeviceManager( 271): setEnabledFunctions,
mDefaultFunctions: mtp,adb
W/UsbDeviceManager( 271): setEnabledFunctions,
mCurrentFunctions: mtp,adb
D/UsbDeviceManager( 271): setEnabledFunctions,
mSettingFunction: mtp,adb
W/UsbDeviceManager( 271): containsFunction,
functions: rndis
W/UsbDeviceManager( 271): containsFunction,
function: adb
W/UsbDeviceManager( 271): containsFunction
index: -1
W/UsbDeviceManager( 271): addFunction,
functions: rndis
W/UsbDeviceManager( 271): addFunction, function:
adb
W/UsbDeviceManager( 271): containsFunction,
functions: rndis
W/UsbDeviceManager( 271): containsFunction,
function: acm
W/UsbDeviceManager( 271): containsFunction
index: -1
W/UsbDeviceManager( 271): containsFunction,
functions: rndis,adb
W/UsbDeviceManager( 271): containsFunction,
function: acm
W/UsbDeviceManager( 271): containsFunction
index: -1
D/UsbDeviceManager( 271):
setUsbConfig(none)
W/UsbDeviceManager( 271): setUsbConfig, config:
none
public
boolean onPreferenceTreeClick(PreferenceScreen
screen, Preference preference) {
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if
(preference == mUsbTether) {
if
(!mUsbTethering) {
boolean
newState = mUsbTether.isChecked();
mUsbTethering = true;
mUsbTetherCheckEnable = false;
mUsbTether.setEnabled(false);
SXlog.d(TAG,
"onPreferenceTreeClick - setusbTethering(" + newState + ")
mUsbTethering: " + mUsbTethering);
if
(newState) {
startProvisioningIfNecessary(USB_TETHERING);
} else
{
setUsbTethering(newState);
}
} else
{
return
true;
}
} else if
(preference == mBluetoothTether) {
private void
setUsbTethering(boolean
enabled) {
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("");
}
2.2
ConnectivityManager.java
frameworks/base/core/java/android/net/ConnectivityManager.java
private
final IConnectivityManager
mService;
public int
setUsbTethering(boolean
enable) {
try
{
return
mService.setUsbTethering(enable);
} catch
(RemoteException e) {
return
TETHER_ERROR_SERVICE_UNAVAIL;
}
}
manager 和service有一个对应关系,固定的规则。 manager是为了sdk诞生的,方便app开发者调用。其实可以直接调用service,如mountservice是没有mountmanager的。
service是在系统起来是就被android系统启动的,而manager是后期有需要时实例化起来的。
Service的目录在:/frameworks/base/services/java/com/android/server/
manager的目录在:frameworks/base/core/java/android
2.3
ConnectivityService.java
frameworks/base/services/java/com/android/server
private
Tethering mTethering;
public int
setUsbTethering(boolean
enable) {
enforceTetherAccessPermission();
if
(isTetheringSupported()) {
return
mTethering.setUsbTethering(enable);
} else
{
return
ConnectivityManager.TETHER_ERROR_UNSUPPORTED;
}
}
2.4
Tethering.java
frameworks/base/services/java/com/android/server/connectivity/Tethering.java
public int
setUsbTethering(boolean
enable) {
UsbManager usbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);
………………
else
{
mUsbTetherRequested = true;
usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS,
false);
}
通过service,来获取manager,进行操作。这个tethering.java的构造函数
public
Tethering(Context context,
INetworkManagementService nmService,
INetworkStatsService statsService,
IConnectivityManager connService, Looper looper)
{
Context是获取全局信息的接口,
2.5 UsbManager.java
/frameworks/base/core/java/android/hardware/usb/UsbManager.java
public void setCurrentFunction(String
function, boolean makeDefault) {
try {
mService.setCurrentFunction(function,
makeDefault);
}
catch (RemoteException e) {
Log.e(TAG, "RemoteException in
setCurrentFunction", e);
}
}
2.6
frameworks/base/services/java/com/android/server/usb$
mengfd1@tablet-C:~/work/A2107/frameworks/base/services/java/com/android/server$
cd usb
mengfd1@tablet-C:~/work/A2107/frameworks/base/services/java/com/android/server/usb$
ls
UsbDeviceManager.java UsbHostManager.java
UsbService.java UsbSettingsManager.java
/frameworks/base/services/java/com/android/server/usb/UsbService.java
public void setCurrentFunction(String function, boolean
makeDefault) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB,
null);
if
(mDeviceManager != null) {
mDeviceManager.setCurrentFunction(function,
makeDefault);
}
else {
throw new IllegalStateException("USB device
mode not supported");
}
}
/frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java
public void setCurrentFunction(String
function, boolean makeDefault) {
if
(DEBUG) Slog.d(TAG, "setCurrentFunction(" + function + ") default:
" + makeDefault);
mHandler.sendMessage(MSG_SET_CURRENT_FUNCTION,
function, makeDefault);
}
public void handleMessage(Message msg)
{
case
MSG_SET_CURRENT_FUNCTION:
String function =
(String)msg.obj;
boolean makeDefault = (msg.arg1 ==
1);
if (function != null
&&
function.equals(UsbManager.USB_FUNCTION_CHARGING_ONLY))
{
mSettingUsbCharging = true;
SXlog.d(TAG, "handleMessage -
MSG_SET_CURRENT_FUNCTION - USB_FUNCTION_CHARGING_ONLY -
makeDefault: " + makeDefault);
} else {
mSettingUsbCharging = false;
}
setEnabledFunctions(function,
makeDefault);
SXlog.d(TAG, "handleMessage -
MSG_SET_CURRENT_FUNCTION - function: " +
function);
break;
private void setEnabledFunctions(String
functions, boolean makeDefault) {
private boolean setUsbConfig(String config) {
SystemProperties.set("sys.usb.config",
config);
public int setUsbTethering(boolean enable) {
if (VDBG) Log.d(TAG, "setUsbTethering(" + 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);//一开始因为rndis还没有enable,所以会先设置function
}
} else {
tetherUsb(false);
if (mRndisEnabled) {
usbManager.setCurrentFunction(null, false);
}
mUsbTetherRequested = false;
}
}
return ConnectivityManager.TETHER_ERROR_NO_ERROR;
}
USB Reverse Tethering(Internet Pass-Through):反向USB网络共享技术,手机通过USB线连接电脑时,手机通过电脑的网络进行上网。
不是手机通过usb上网,是手机可以当usb上网卡,电脑用usb通过手机上网
圈养的USB
手机通过USB 上网
载琰安可: 手机有3G上网卡,用USB线连接电脑,打开USB tethering功能,电脑能与手机共享网络,实现上网.
江达县13972431600: 请问Mobile AP怎用??
载琰安可: Mobile AP或一般称为Tethering,是指利用手机把手机的数据服务分享给其他Device使用作上网,所以必定会产生数据流量,不然,那些共享了数据服务的Device又怎样上网能呢?一般Tethering可以经由USB(即手机以USB线连接电脑,电脑会...
江达县13972431600: 华为手机在Vista 和Win7下如何使用USB tethering??
载琰安可: 1、手机通过USB 线链接电脑,vista 和WIN7 会自动安装设备驱动; 2、进入设置->无线和网络->绑定与便携式热点->勾选USB tethering,查看Network adapters 和Network and Sharing Center; 3、USB tethering 处于勾选状态时,PC 可以打开浏览器上网了. 该答案来自华为官方网站
江达县13972431600: 电脑可不可以分享手机既网路黎用??
载琰安可: 不单止WIFI 架, 其实你插USB 线都可以SHARE 手机既3G 或4G 上网只要ENABLE 手机既INTERNET TETHERING, 一般TETHERING 系指利用WIFI SHARE 比其他机, 而你可以见到系手机SETTING 入面Tethering 有一个叫做USB TETHERING 拣呢个就系经USB SHARE INTERNET 去电脑用既
江达县13972431600: 谷歌Android 2.2 Froyo将增加内置的USB tethering(网络共享),从而实现手机与笔记本电脑共享网络连接?
载琰安可: 就是你有个了个USB 3G无线网卡.插上你的Android2.2设备并连好3G,打开USB tethering功能,你的电脑就可以通过3g上网了 2.2还可以通过建立无线局域网实现3G无线路由器功能,可以吧3G网络共享出来让多台电脑一起用3G网络. 我试过,确实爽
江达县13972431600: 如何将手机作为modem拨号上网??
载琰安可: Android2.1以上系统: XP操作系统使用USB tethering: 1.手机连接PC,进入我的电脑->点击Mobile Partner CD驱动器,选择drivers,点击usbnet_driver_win2k_xp,点击DownloadActiveSync快捷方式,进入网站后根据提示下载安装ActiveSync...
江达县13972431600: 现在最新的手机操作系统是什么? - ?
载琰安可: 自然是Android 2.2,它的JIT compiler功能可以极大提高系统的运行速度,支持Flash 10.1等视频插件,可以流畅的在线看电影,新增无线网路, USB 共享功能,系统自动升级也让人省力不少.不需要安装非官方程式或Root机刷ROM才能支持Tethering功能,可直接利用官方预设的USB Tethering及WiFi Hotspot来尽情享受Tethering功能.现在新出的三星GALAXY Tab 就用的Android 2.2,是首批用这个系统的智能平板手机,如果你要买手机这款是首选.
江达县13972431600: Internet Tethering共享上网教程是什么? - ?
载琰安可: 1.在iPhone上打开safari,打开网址:http://help.benm.at/help.php 2.下拉滚动条一直到Tethering & Internet Settings点击下面的Mobileconfigs,选择国家地区和运营商. 3.之后会跳出窗口确认. 4.然后回到iPhone的Settings->General->Network里...
江达县13972431600: 台式电脑怎么连接usb共享网络 - ?
载琰安可:用usb把台式机的网络共享给手机用的步骤:1. 保证手机获取得ROOT.2. 保证手机和电脑连接上,并开启USB调试.注意:连接上电脑的注意关闭豌豆荚、91手机助手等占ADB的软件.3. 下载ReverseTethering并在电脑上解压.把Tracetool service.apk这个软件安装到手机上,然后在上电脑安装AndroidTool.exe.4. 点击【更新列表】按钮,会发现安卓设备的ID.再点击【Connect】,稍等一会后就能成功连接.这样就通过电脑让手机上网了.如果是笔记本或者有无线网卡的台式机,只需要在电脑上安装免费WIFI软件,设置好SSID和密码后,手机搜索WIFI,输入密码就能连上了.
江达县13972431600: 在笔记本电脑上利用手机wifi的USB连接上网 - ?
载琰安可: 如果你笔记本没有无线网卡,可以考虑买一个随身WiFi,比如360或者百度,或者小米的,可以当你在宾馆只有有线网络的情况下共享网络给手机使用,也可以在有WiFi的环境下,当接收器使用.