Cómo utilizar el programa para modificar el método de red en Android
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 { p>
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 ?
}
} p>
}
}
}
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.