2010-10-11 5 views
5

Dans mon application Android, je voudrais obtenir tous les APN disponibles et vérifier si le APN client est disponible. Je voudrais exécuter mon application en utilisant ce client APN.Définir APN par programme sur Android

Existe-t-il un moyen d'y parvenir sur Android?

Répondre

4

Ceci pourrait ne pas répondre directement à votre question. Jetez un oeil à this. Gardez à l'esprit que ce code est pour référence seulement et ne doit pas être utilisé dans votre application.

Pour obtenir défini APN:

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

Et puis se référer à Telephony.Carriers pour les colonnes pertinentes.

+0

Ya i essayé d'utiliser dans mon application et il jette cette erreur: 'java.lang.SecurityException: Pas d'autorisation pour écrire les paramètres APN: Ni l'utilisateur 10099 ni le processus en cours a android.permission.WRITE_APN_SETTINGS.' – toobsco42

+0

ajouter la permission requise (http://developer.android.com/reference/android/Manifest.permission.html#WRITE_APN_S ETTINGS) au manifeste – Asahi

+0

Lorsque j'ai essayé de l'ajouter au manifeste, seules les applications natives pouvaient ajouter cette autorisation. – toobsco42

3

Si vous voulez lire l'APN pour Android 4.2 et plus, ils sont un changement à faire. Je l'ai testé, et ça fonctionne.

Dans Android 4.1 et ci-dessus utilisent ceci:

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

Et pour Android 4.2 et plus utiliser ce code:

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

Et cette ligne:

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

Le SQLiteWrapperClass est caché (j'ai trouvé cette classe sur Internet).

import android.database.sqlite.SqliteWrapper; 
+0

Bonjour vincent091, Carriers.CONTENT_URI? –

+0

Classe c = Class.forName ("android.database.sqlite.SqliteWrapper"); aboutit à c.name = null. On dirait que cette méthode ne fonctionne pas. – Pawel

0

Vous aurez besoin de l'autorisation:

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

Le code:

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); 
    } 
Questions connexes