2010-10-11 9 views
5

En mi aplicación Android me gustaría obtener todos los APN disponibles y comprobar si el cliente APN está disponible. Me gustaría ejecutar mi aplicación utilizando este cliente APN.Establecer APN programáticamente en Android

¿Hay alguna manera de lograr esto en Android?

Respuesta

4

Esto podría no responder su pregunta directamente. Eche un vistazo al this. Aunque tenga en cuenta que este código es para , haga referencia solo al y no debe usarse en su aplicación.

para obtener define APN:

Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null); 

Y a continuación, se refieren a Telephony.Carriers para las columnas correspondientes.

+0

Ya he intentado usar esto en mi aplicación y se lanza este error: 'java.lang.SecurityException: No permission para escribir configuraciones APN: Ni el usuario 10099 ni el proceso actual tienen android.permission.WRITE_APN_SETTINGS. – toobsco42

+0

agregue el permiso requerido (http://developer.android.com/reference/android/Manifest.permission.html#WRITE_APN_S ETTINGS) al manifiesto – Asahi

+0

Cuando intenté agregarlo al manifiesto, dijo que solo las aplicaciones nativas pueden agregar este permiso. – toobsco42

3

Si desea leer el APN para Android 4.2 y más, es un cambio que hacer. Lo probé y funciona.

En Android 4.1 y el uso de este:

Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null); 

Y para Android 4.2 y más utilizar este código:

private static final String[] APN_PROJECTION = { 
    Telephony.Carriers.TYPE,   // 0 
    Telephony.Carriers.MMSC,   // 1 
    Telephony.Carriers.MMSPROXY,  // 2 
    Telephony.Carriers.MMSPORT   // 3 
}; 

Y esta línea:

final Cursor apnCursor =SqliteWrapper.query(context, this.context.getContentResolver(), Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null); 

El SQLiteWrapperClass es oculto (encontré esta clase en Internet).

import android.database.sqlite.SqliteWrapper; 
+0

Hola vincent091, Operadoras.CONTENT_URI? –

+0

Clase c = Class.forName ("android.database.sqlite.SqliteWrapper"); resultados en c.name = null. Parece que este método no funciona. – Pawel

0

Usted necesitará el permiso:

<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" /> 

El código:

private void addApn(Intent intent) { 
     final String apn = intent.getStringExtra(APN_EXTRA_APN); 
     final String name = intent.getStringExtra(APN_EXTRA_NAME); 
     final String type = intent.getStringExtra(APN_EXTRA_TYPE); 
     final String proxy = intent.getStringExtra(APN_EXTRA_PROXY); 
     final int mnc = intent.getIntExtra(APN_EXTRA_MNC, 6); 
     final int mcc = intent.getIntExtra(APN_EXTRA_MCC, 724); 
     final String user = intent.getStringExtra(APN_EXTRA_USER); 
     final String password = intent.getStringExtra(APN_EXTRA_PASSWORD); 
     final String server = intent.getStringExtra(APN_EXTRA_SERVER); 

     final ContentResolver cr = mContext.getContentResolver(); 
     ContentValues values = new ContentValues(); 
     values.put(Telephony.Carriers.APN, apn); 
     values.put(Telephony.Carriers.NAME, name); 
     values.put(Telephony.Carriers.TYPE, type); 
     values.put(Telephony.Carriers.PROXY, proxy); 
     values.put(Telephony.Carriers.MNC, mnc); 
     values.put(Telephony.Carriers.MCC, mcc); 
     values.put(Telephony.Carriers.USER, user); 
     values.put(Telephony.Carriers.PASSWORD, password); 
     values.put(Telephony.Carriers.SERVER, server); 
     cr.insert(Telephony.Carriers.CONTENT_URI, values); 
    } 
Cuestiones relacionadas