Android APN Enforcement

Кто-то знает, существует ли программный способ использования определенного определенного APN на устройстве, которое не является значением по умолчанию?

Благодарю.

2 ответа

Решение

Вы можете программно запросить и установить предпочтительный 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 и android.provider.Telephony.Carriers

ОБНОВЛЕНИЕ ДЛЯ 4.0+

Это средство стало недоступным с выпуском Android 4.0 (ICS). Включение разрешения WRITE_APN_SETTINGS никак не влияет на то, чтобы вы могли больше задавать APN. Смотрите этот вопрос для некоторых соответствующих ссылок. На странице API теперь прямо указано, что это разрешение не для внешнего использования, и оно применяется внутри страны.

Я не думаю, что есть способ, даже если он есть, оператор может уничтожить его с помощью обновления программного обеспечения. Кроме того, для некоторых операторов связи, таких как AT&T в США, использование определенной APN обеспечивает определенную функциональность, например получение номера подписчика этого пользователя (его уникальный идентификатор, а не номер телефона). Таким образом, может быть плохой идеей форсировать это изменение, так как это повлияет на множество других приложений, установленных на телефоне.

Другие вопросы по тегам