因爲工做中須要用到網絡的判斷和APN的切換,研究了一下Android中APN的修改和切換,關於APN的基礎知識,這裏就不在介紹了,本身百度就行!
java
直接進入正題:
android
一、創建一個android工程,須要以下權限:
數據庫
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" >
</uses-permission>
二、android 4.0版本以上,用戶沒有訪問和修改APN的權限,因此,要修改和讀取APN,必須讓apk變成系統級應用(或者說擁有系統級權限)。有兩個方法:(1)編譯android源碼,在android源碼環境下編譯apk。(2)取得手機root權限。我選擇了第二種,具體操做爲:把編譯好的apk放入 /system/app/目錄下,必定要記得修改apk的權限爲 chmod 644 /system/app/apk,而後reboot,就能夠搞定。
網絡
三、獲取全部APN, 方法是經過ContentResolver,uri地址爲"content://telephony/carriers"。代碼以下:app
public Map<String, String> checkAPN() {
Map<String, String> map = new HashMap<String, String>();
Cursor cr = getContentResolver().query(CURRENT_APN_URI, null, null, null, null);
int i = 0;
while (cr != null && cr.moveToNext()) {
String id = cr.getString(cr.getColumnIndex("_id"));
map.put("id"+i, id);
String apn = cr.getString(cr.getColumnIndex("apn"));
map.put("apn"+i, apn);
}
return map;
}
四、設置當前APN,Uri地址爲"content://telephony/carriers/preferapn",代碼以下:
ide
public void SetAPN(int id) {
ContentResolver resolver = this.getContentResolver();
ContentValues values = new ContentValues();
values.put("apn_id", id);
resolver.update(CURRENT_APN_URI, values, null, null);
}
五、新增APN,同上,能夠用insert新增一條APN,Uri地址爲"content://telephony/carriers"。
this
六、APN數據在手機中保存的位置:
spa
全部的APN數據都保存在:/data/data/com.android.providers.telephony/databases/telephony.db。能夠經過adb取出來查看,以下圖:code
數據庫中的current字段爲」1「時,是用戶在手機設置->移動網絡->接入點能夠設置的APN。
xml