2011-10-23 7 views
3

デフォルトのデバイスではない特定の定義済みのAPNをデバイス上で使用するためのプログラム的な方法がありますか?Android APN Enforcement

ありがとうございました。

答えて

10

uri content://telephony/carriers/preferapnを使用して、プログラムによるクエリーおよび優先APNの設定を行うことができます。新しい優先APNを設定するには、既存のAPNエントリのデータベースIDを渡す必要があります。私はあなたがWRITE_APN_SETTINGSの許可を必要とandroid.provider.TelephonyとAndroidをインポートする必要があることを追加する必要がありますね

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; 
} 

を:あなたはAPN(setPreferredApn(context, "Giffgaff");など)の表示名を渡す場合は、次の機能がこれを行うことができます。 provider.Telephony.Carriers

UPDATE 4.0+

FORこの機能は、Android 4.0(ICS)のリリースで無効になりました。 WRITE_APN_SETTINGS権限を有効にしても、APNを設定することはできません。関連するリンクについては、this questionを参照してください。 API pageでは、このアクセス許可は外部使用用ではないことが明示的に示されており、これは社内で実施されています。

+0

ありがとうございました。つまり、このコードを実行すると、デバイス上のすべてのアプリケーションが特定のAPNを使用しますか? – Paz

+0

はい。これは、デバイスの優先APNを設定します。 – patthoyts

+0

ありがとう!どのgiffgaffアプリを作ったのですか? –

-1

私は方法があるとは思わないが、1つでもあっても、キャリアはソフトウェアアップデートでそれを拭くことができる。また、米国内のAT & Tのような一部のキャリアでは、特定のAPNを使用すると、そのユーザのユーザ番号(電話番号ではなく固有のID)を取得するなどの特定の機能が提供されます。この変更を強制するのは良い考えではないかもしれません。これは、端末にイ​​ンストールされている他の多くのアプリに影響を与えるためです。

関連する問題