3

デフォルトのものではないデバイスで特定の定義済みAPNをプログラムで使用する方法があるかどうか誰かが知っていますか?

ありがとう。

4

2 に答える 2

11

uriを使用して、プログラムでクエリを実行し、優先APNを設定できますcontent://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を設定できるようにはなりません。関連するリンクについては、この質問を参照してください。APIページに、この権限は外部で使用するためのものではなく、内部で適用されることが明示的に示されています。

于 2011-10-23T21:35:05.437 に答える