其他分享
首页 > 其他分享> > Android APN执行

Android APN执行

作者:互联网

有人知道是否有一种编程方式在设备上使用特定的定义APN而不是默认的APN?

谢谢.

解决方法:

您可以使用uri内容以编程方式查询和设置首选APN:// telephony / carriers / preferapn.要设置新的首选APN,您必须传入现有APN条目的数据库ID.如果传入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没有影响.有关相关链接,请参见this question.在API page,它现在明确声明此权限不是外部使用,而是在内部强制执行.

标签:android,apn,enforcement
来源: https://codeday.me/bug/20190721/1494994.html