2010-10-11 19 views
5

Android uygulamasında, tüm kullanılabilir APN'leri almak ve istemci APN'nin kullanılabilir olup olmadığını kontrol etmek istiyorum. Uygulamamı bu istemci APN'yi kullanarak çalıştırmak istiyorum.APN'yi programatik olarak Android'de ayarlayın

Android'de bunu başarmanın bir yolu var mı?

cevap

4

Bu, doğrudan sorunuzu yanıtlamayabilir. this'a bir göz atın. Bu kodun referansı için yalnızca olduğunu ve uygulamanızda kullanılmaması gerektiğini unutmayın.

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

Ve sonra, ilgili sütunlar için Telephony.Carriers bakınız:

APN tanımlanmış almak için.

+0

Ya benim app bu kullanarak çalıştı ve bu hatayı atar: 'java.lang.SecurityException: APN ayarları yazmak için izin yok: Ne kullanıcı 10099 ne de şimdiki işlem android.permission.WRITE_APN_SETTINGS.' – toobsco42

+0

gerekli izni ekleyin (http://developer.android.com/reference/android/Manifest.permission.html#WRITE_APN_S ETTINGS) manifestosuna – Asahi

+0

Bildirime eklemeyi denediğimde, yalnızca yerel uygulamaların bu izni ekleyebileceğini söylediler. – toobsco42

3

Android 4.2 ve daha fazlası için APN'yi okumak istiyorsanız, bunların yapılması için bir değişiklik yapın. Test ettim ve işe yarıyor. Android 4.1 içinde ve kullanıma bu yukarıda

:

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

Ve bu satırı:

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

SQLiteWrapperClass olduğunu

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

Ve Android 4.2 ve daha bu kodu kullanın

Gizli (Bu sınıfı internette buldum).

import android.database.sqlite.SqliteWrapper; 
+0

Merhaba vincent091, Carriers.CONTENT_URI? –

+0

Sınıf c = Class.forName ("android.database.sqlite.SqliteWrapper"); c.name = null ile sonuçlanır. Bu yöntem işe yaramıyor gibi görünüyor. – Pawel

0

İzne gerekir:

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

kodu:

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); 
    } 
İlgili konular