В моем приложении для Android я хотел бы получить все доступные APN и проверить, доступен ли APN клиента. Я хотел бы запустить приложение, используя этот клиент APN.Установите APN программно на Android
Есть ли способ достичь этого на Android?
В моем приложении для Android я хотел бы получить все доступные APN и проверить, доступен ли APN клиента. Я хотел бы запустить приложение, используя этот клиент APN.Установите APN программно на Android
Есть ли способ достичь этого на Android?
Это может не ответить на ваш вопрос напрямую. Посмотрите на this. Хотя имейте в виду, что этот код предназначен для только для ссылки и не должен использоваться в вашем приложении.
Чтобы определить APN:
Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null);
А затем обратитесь к Telephony.Carriers
для соответствующих столбцов.
Если вы хотите прочитать 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;
Здравствуйте, vincent091, Carriers.CONTENT_URI? –
Класс c = класс.forName ("android.database.sqlite.SqliteWrapper"); приводит к c.name = null. Похоже, этот метод не работает. – Pawel
Вам потребуется разрешение:
<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);
}
Я. Я попытался использовать это в моем приложении, и он выдает эту ошибку: 'java.lang.SecurityException: Нет разрешения на запись настроек APN: ни пользователь 10099, ни текущий процесс не имеют android.permission.WRITE_APN_SETTINGS.' – toobsco42
добавить необходимое разрешение (http://developer.android.com/reference/android/Manifest.permission.html#WRITE_APN_S ETTINGS) к манифесту – Asahi
Когда я попытался добавить его в манифест, он сказал, что только эти Native приложения могут добавить это разрешение. – toobsco42