Red de conocimiento informático - Computadora portátil - Cómo utilizar el programa para modificar el método de red en Android

Cómo utilizar el programa para modificar el método de red en Android

Algunos de los servicios de China Mobile requieren el uso de puntos de acceso CMWAP para conectarse a la red. Al realizar dichas aplicaciones, es inevitable determinar el APN actual, cambiar el APN y conectarse al servidor después de conectarse exitosamente a la red.

En primer lugar, existen dos formas de obtener el APN actual. Una es obtenerlo del servicio de conexión de red del sistema actual, es decir:

La otra es. obtenerlo del servicio de conexión de red del sistema actual Obtenido del servicio,

ConnectivityManager conManager= (ConnectivityManager) getSystemService(Context. CONNECTIVITY_SERVICE

NetworkInfo info = conManager.getNetworkInfo); (ConnectivityManager.TYPE_MOBILE);

Cadena currentAPN = info.getExtraInfo();

CurrentAPN es "cmnet" o "cmwap".

Otra forma es consultar la base de datos, ya que el APN que configuramos se guarda en xml local.

Primero declare APN_URI:

public static final Uri CURRENT_APN_URI = Uri.parse("content://telephony/carriers/preferapn"); final Uri APN_LIST_URI = Uri.parse("content://telephony/carriers");

CURRENT_APN_URI contiene el registro APN seleccionado actualmente y APN_LIST_URI contiene la lista de APN.

Cadena estática pública getCurrentAPNFromSetting(Resolver ContentResolver) {

Cursor cursor = null

intentar {

cursor =; resolver.query(CURRENT_APN_URI, nulo, nulo, nulo, nulo);

String curApnId = null

if (cursor != null amp; amp; cursor.moveToFirst()) {

curApnId = cursor.getString(cursor.getColumnIndex("apn_id"));

String apnName1 = cursor.getString(cursor.getColumnIndex("apn")); p>

p>

}

if (cursor !

cursor.close();

//busca el nombre de apn en la lista de apn

if (curApnId ! = null) {

cursor = resolver.query(APN_LIST_URI, null, " _id = ?" , new String[]{curApnId}, null); /p>

if (cursor ! = null amp; cursor.moveToFirst()) {

String apnName = cursor.getString(cursor.getColumnIndex("apn")); p> Devuelve apnName;

}

if (cursor !

}}

} catch (SQLException e) {

Debug.error(e.getMessage());

} finalmente {

if (cursor ! = null) {

cursor.close ();

}

}

}

si (cursor !

}

Devuelve nulo;

}

Después de obtener el APN, debe determinar si es un cmwap; de lo contrario, debe cambiarlo a un cmwap.

Puede cambiar la base de datos mediante

public static int updateCurrentAPN(ContentResolver resolver, String newAPN) {

Cursor cursor = null

try {

//obtener nueva identificación de apn de la lista

cursor = resolver.query(APN_LIST_URI, null, " apn = ? and current = 1", new String[]{newAPN.toLowerCase()}, null);

String apnId = null;

if (cursor ! = null amp; cursor.moveToFirst()) {

apnId = cursor. cursor.getColumnIndex("_id"));

}

cursor.getString(cursor.getColumnIndex("_id")); nueva identificación de apn de la lista.

cursor.close();

//establece la nueva identificación de apn como la elegida

if (apnId ! = null) {

Valores de contenido = nuevos Valores de contenido();

valores.put("apn_id", apnId

resolver.update(CURRENT_APN_URI); , valores, nulo, nulo);

} else {

//apn id no se encuentra, devuelve 0.

Devuelve 0;

} //no se encuentra la identificación de apn, devuelve 0.

} catch (SQLException e) {

Debug.

}

}

// Actualización exitosa

Devuelve 1;

}

Después de cambiar la base de datos, la red no se conecta inmediatamente, por lo que debemos agregar un NetworkChangeReceiver de la siguiente manera:

/*

* Receptor para observar cambios en las conexiones de red

*/

clase pública NetworkChangeReceiver p> clase pública NetworkChangeReceiver extiende BroadcastReceiver {

public void onReceive(Contexto contexto, Intención intención) {

if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())){

NetworkInfo info = conManager .getNetworkInfo (ConnectivityManager.TYPE_MOBILE);

Cadena apn = info.getExtraInfo()

if ("cmwap".equals(apn)) {

/*

* El mensaje de cambio de apn se envía varias veces por segundo, pero en realidad solo ocurre una vez.

*/

if (mNChangeReceiver ! = null) {

updateDcdContent(mManRequest

HwDcdCmService.this.unregisterReceiver(mNChangeReceiver);

mNChangeReceiver = nulo

}

si (mNChangeReceiver ?

}

}

}

}

}

La entrada general para cambiar de apn es la siguiente, que incluye detectar el apn actual, cambiar y registrar la red. oyentes:

/*

* Si la conexión de red actual no es cmwap, cámbiela a cmwap.

*/

public int forceCMWapConnection() {

NetworkInfo info = conManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); info.getExtraInfo();

//si el apn actual no es cmwap, tenemos que cambiar a cmwap.

if (!" cmwap".equals(oldAPN)){

mNChangeReceiver = new NetworkChangeReceiver();

//registra el receptor para la conexión de red wap.

IntentFilter upIntentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION

RegisterReceiver(mNChangeReceiver, upIntentFilter);

MyUtil.updateCurrentAPN(getContentResolver(), "cmwap");

Devolución

}

Devuelve 0.

Devuelve 0;

}

Por cierto, cuando se utiliza cmwap para conectarse a la red, no basta con cambiar el punto de acceso, también También es necesario incluirlo en el encabezado de solicitud Agregado. Pero esto no parece funcionar en el SDK de Android original.