2010-10-11 2 views
5

В моем приложении для Android я хотел бы получить все доступные APN и проверить, доступен ли APN клиента. Я хотел бы запустить приложение, используя этот клиент APN.Установите APN программно на Android

Есть ли способ достичь этого на Android?

ответ

4

Это может не ответить на ваш вопрос напрямую. Посмотрите на this. Хотя имейте в виду, что этот код предназначен для только для ссылки и не должен использоваться в вашем приложении.

Чтобы определить APN:

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

А затем обратитесь к Telephony.Carriers для соответствующих столбцов.

+0

Я. Я попытался использовать это в моем приложении, и он выдает эту ошибку: 'java.lang.SecurityException: Нет разрешения на запись настроек APN: ни пользователь 10099, ни текущий процесс не имеют android.permission.WRITE_APN_SETTINGS.' – toobsco42

+0

добавить необходимое разрешение (http://developer.android.com/reference/android/Manifest.permission.html#WRITE_APN_S ETTINGS) к манифесту – Asahi

+0

Когда я попытался добавить его в манифест, он сказал, что только эти Native приложения могут добавить это разрешение. – toobsco42

3

Если вы хотите прочитать APN для Android 4.2 и более, это изменение. Я тестировал его, и он работает.

В Android 4.1 и выше использования этого:

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

И для Android 4.2 и более использовать этот код:

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

и эта линия:

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

SQLiteWrapperClass является hidden (я нашел этот класс в Интернете).

import android.database.sqlite.SqliteWrapper; 
+0

Здравствуйте, vincent091, Carriers.CONTENT_URI? –

+0

Класс c = класс.forName ("android.database.sqlite.SqliteWrapper"); приводит к c.name = null. Похоже, этот метод не работает. – Pawel

0

Вам потребуется разрешение:

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

Код:

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); 
    } 
Смежные вопросы