Вы можете программно запрашивать и устанавливать предпочтительный APN, используя uri content://telephony/carriers/preferapn
. Чтобы установить новый предпочтительный APN, вы должны передать идентификатор базы данных существующей записи APN. Следующая функция может сделать это, если вы передаете отображаемое имя APN (например: setPreferredApn(context, "Giffgaff");
)
public static final Uri APN_TABLE_URI = Uri.parse("content://telephony/carriers");
public static final Uri APN_PREFER_URI = Uri.parse("content://telephony/carriers/preferapn");
public static boolean setPreferredApn(Context context, String name) {
boolean changed = false;
String columns[] = new String[] { Carriers._ID, Carriers.NAME };
String where = "name = ?";
String wargs[] = new String[] {name};
String sortOrder = null;
Cursor cur = context.getContentResolver().query(APN_TABLE_URI, columns, where, wargs, sortOrder);
if (cur != null) {
if (cur.moveToFirst()) {
ContentValues values = new ContentValues(1);
values.put("apn_id", cur.getLong(0));
if (context.getContentResolver().update(APN_PREFER_URI, values, null, null) == 1)
changed = true;
}
cur.close();
}
return changed;
}
Полагаю, мне следует добавить, что вам нужно разрешение WRITE_APN_SETTINGS и вам необходимо импортировать android.provider.Telephony and android.provider.Telephony.Carriers
ОБНОВЛЕНИЕ ДЛЯ 4.0 +
Эта функция отключена с выпуском Android 4.0 (ICS). Включение разрешения WRITE_APN_SETTINGS никак не влияет на то, чтобы вы могли больше задавать APN. См. этот вопрос для некоторых соответствующих ссылок. На странице API теперь прямо указывается, что это разрешение не для внешнего использования и применяется внутри страны.