Red de conocimiento informático - Conocimiento informático - Cómo utilizar la clase de auriculares Bluetooth a través de la reflexión

Cómo utilizar la clase de auriculares Bluetooth a través de la reflexión

Usb

El proceso de configuración en Configuración de anclaje a red

Una ubicación de recursos y un archivo de entrada

USB

Anclaje a red, usb_tethering_button_text

Xml/tether_prefs.xml ------usb_tether_settings, archivo de diseño

paquetes/apps/Settings/AndroidManifest.xml

lt;! -- Mantener la compatibilidad con atajos

antiguos.

lt; alias de actividad

android: nombre=".TetherSettings"

android..TOP_LEVEL_HEADER_ID"

android: recurso= "@id/wireless_settings"

/gt;

lt;meta-data

android: name="com.android.settings.Settings$WirelessSettingsActivity"

/gt;

lt;/activity-aliasgt;

TetherSettings.java

Dos procesos desencadenantes

2.1

TetherSettings.java

paquetes/apps/Settings/src/com/android/settings/TetherSettings.java

onPreferenceTreeClick

SXlog.d(TAG,

"onPreferenceTreeClick - setusbTethering(" newState ")

mUsbTethering: " mUsbTethering);

setUsbTethering(true);< / p>

El siguiente es el registro capturado durante la configuración

D/TetherSettings(543): onPreferenceTreeClick -

setusbTethering(true) mUsbTethering: true

D/Tethering(

271): setUsbTethering(true)

D/UsbDeviceManager( 271):

setCurrentFunction( rndis) Valor predeterminado: falso< / p>

W/UsbDeviceManager( 271): handleMessage:

2

W/UsbDeviceManager( 271): setEnabledFunctions:

funciones = rndis< / p>

Con UsbDeviceManager( 271): setEnabledFunctions,

mDefaultFunctions: mtp, adb

Con UsbDeviceManager( 271).setEnabledFunctions,

mCurrentFunctions : mtp, adb

D/UsbDeviceManager(271): setEnabledFunctions,

mSettingFunction: mtp, adb

W/UsbDeviceManager(271): contieneFunción,< / p>

funciones: rndis

W/UsbDeviceManager(271): contieneFunción,

functio

ns: adb

W/UsbDeviceManager( 271): contieneFunción

índice: -1

W/UsbDeviceManager( 271): addFunction,

funciones: rndis

W/UsbDeviceManager(271): addFunction, función:

adb

W/UsbDeviceManager(271): contieneFunción,

W/UsbDeviceManager(271): contieneFunción,

funciones: rndis

W/UsbDeviceManager(271): contieneFunción,

función: acm

W/UsbDeviceManager( 271).containsFunction

índice: -1

W/UsbDeviceManager( 271): contieneFunción,

funciones: rndis, adb

W/UsbDeviceManager(271): contieneFunción,

función: acm

W/UsbDeviceManager(271): contieneFunción

índice: - 1

D/UsbDeviceManager(271):

setUsbConfig(none)

W/UsbDeviceManager(271): setUsbConfig, configuración:

ninguno

público

booleano onPreferenceTreeClick(PreferenceScreen

pantalla, preferencia de preferencia) {

ConnectivityManager cm =

(ConnectivityManager )getSystemService(Context.CONNECTIVITY_SERVICE);

if

(preferencia == mUsbTether) {

if

(! mUsbTethering) {

booleano

newState = mUsbTether.isChecked();

mUsbTethering = true;

mUsbTetherCheckEnable = false;

p>

mUsbTether.setEnabled(false);

SXlog.d(TAG,

"onPreferenceTreeClick - setusbTethering(" newState ")

mUsbTethering: " mUsbTethering);

if

(newState) {

startProv

isioningIfNecessary(USB_TETHERING);

} else

{

setUsbTethering(newState);

}

} else

{

return

verdadero;

}

}

} else if

(preferencia == mBluetoothTether) {

private void

setUsbTethering(boolean

habilitado) {

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

privado

IConnectivityManager final

mService;

public int

setUsbTethering(boolean

enable) {

intentar

{

regresar

mService.setUsbTethering(enable);

} catch

(RemoteException e) {

return

TETHER_ERROR_SERVICE_UNAVAIL;

}

}

}

}

}

gerente Existen reglas fijas correspondientes a los servicios. El administrador se crea para el SDK para que a los desarrolladores de aplicaciones les resulte más fácil llamarlo. De hecho, puede llamar a los servicios directamente, por ejemplo, mountservice no es mountmanager.

El sistema Android inicia el servicio en el sistema, mientras que el administrador se inicia cuando es necesario crear una instancia más adelante.

El servicio se encuentra en el siguiente directorio: /frameworks/base/services/java/com/android/server/

El administrador se encuentra en el siguiente directorio: frameworks/base /core/java/android

2.3

ConnectivityService.java

frameworks/base/services/java/com/android/server

público

Privado

Anclaje a red mTethering;

público 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);

........................

más

{

mUsbTetherRequested = true;

usbManager.setCurrentFunction(UsbManager.USB_ FUNCTION_RNDIS,

false

}

Obtener); el administrador a través del servicio y operarlo.

Este constructor tethering.java

público

Tethering(Context contexto,

INetworkManagementService nmService,

INetworkStatsService statsService,

IConnectivityManager connService, Looper looper)

{

El contexto es la interfaz para obtener información global,

2.5 UsbManager.java

/frameworks/base/core/java/android/hardware/usb/UsbManager.java

public void setCurrentFunction(String

función, boolean makeDefault) {

prueba {

mService.setCurrentFunction(function,

makeDefault);

}

catch (RemoteException e) {

Log.e(TAG, "RemoteException en

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(función de cadena, boolean

makeDefault) {

mContext.enforceCallingOrSelfPermission(android.Manifest. permiso.MANAGE_USB,

null);

if

(mDeviceManager! = null) {

mDeviceManager.setCurrentFunction(función,

makeDefault);

}

else {

lanzar nuevo enfermo

egalStateException("dispositivo USB

modo no compatible");

}

}

}

/ frameworks/base/services/java/com/android/server /usb/UsbDeviceManager.java

public void setCurrentFunction(String

función, boolean makeDefault) {

si

(DEBUG) Slog.d(TAG, "setCurrentFunction(" función ") predeterminado:

" makeDefault);

mHandler.sendMessage(MSG_SET_CURRENT_FUNCTION ,

función, makeDefault);

}

mensaje de mango público vacío (mensaje de mensaje)

{

caso

MSG_SET_CURRENT_FUNCTION:

Función de cadena =

(String)msg.obj;

booleano makeDefault = (msg.arg1 ==

1);

if (función != null

amp; amp;

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(función,

makeDefault);

SXlog.d(TAG, " handleMessage -

MSG_SET_CURRENT_FUNCTION - función: "

función);

romper;

private void setEnabledFunctions( String

funciones, boolean makeDefault) {

private boolean setUsbConfig(String config) {

SystemProperties.set("sys.usb.config",

config);