有人知道是否有一种以编程方式在设备上使用特定定义的APN的方法,而不是默认的APN?
感谢。
答案 0 :(得分:11)
您可以使用uri content://telephony/carriers/preferapn
以编程方式查询和设置首选APN。要设置新的首选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上,它现在明确声明此权限不是外部使用,而是在内部强制执行。
答案 1 :(得分:-1)
我认为有一种方法,即使有一种方式,运营商也可以通过软件更新来消除它。此外,对于像美国的AT& T这样的一些运营商,使用特定的APN提供特定功能,例如获取该用户的订户号(其唯一ID,而不是电话号码)。因此强制进行此更改可能不是一个好主意,因为它会影响手机上安装的众多其他应用程序。