usb tethering 什么意思

作者&投稿:梅陆 (若有异议请与网页底部的电邮联系)
Android中如何通过反射调用setUsbTethering()方法~

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 Tethering:USB网络共享技术,手机通过USB线连接电脑时,电脑可通过手机的移动网络上网。大部分Android手机系统都自带实现了该功能。
USB Reverse Tethering(Internet Pass-Through):反向USB网络共享技术,手机通过USB线连接电脑时,手机通过电脑的网络进行上网。

不是手机通过usb上网,是手机可以当usb上网卡,电脑用usb通过手机上网

圈养的USB

手机通过USB 上网


江达县13972431600: 什么是USB Tethering功能 -
载琰安可: 手机有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的环境下,当接收器使用.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网