APN整理
前段時間,爲公司項目添加APN設置功能。現在做一些整理,作爲分享,作爲筆記。
APN的字段
不同的手機,他們存放apn相關數據的字段是不一樣的,這裏表示出來的字段都是他們公有的部分。
publicclass APN { publicStringid; publicStringset; //我自己添加的,用戶確認是否需要設置爲默認 publicString name; //顯示的名稱 publicString apn; //接入點名稱 cmwap/cmnet……. publicString mcc; //國家編號 publicString mnc; //運營商編號 publicString numeric; //mcc+mnc運營商在全球上唯一標識 publicString user; //用戶名 publicString password; //密碼 publicString server; //服務 publicString proxy; //代理 publicString port; //端口 publicString mmsport; //短信端口 publicString mmsproxy; //短信代理 publicString mmsc; publicString authtype; publicString current; //當=“1”的時候,顯示 publicString type; //類型 } |
APN的存放路徑
1. 查看全部的apn數據
public UricreateUri = Uri.parse("content://telephony/carriers"); |
2. 查看當前正在使用的apn數據
Uri preferUri=Uri.parse("content://telephony/carriers/preferapn"); |
APN的增加
/** * 創建一個新的數據 */ public UriaddNewApn(APN apn) { Log.i("ApnHelper","執行增加操作"); ContentResolver contentResolver =context.getContentResolver(); ContentValues contentValues =new ContentValues(); contentValues.put("name", apn.getName()); contentValues.put("apn", apn.getApn()); contentValues.put("mcc", apn.getMcc()); contentValues.put("mnc", apn.getMnc()); contentValues.put("numeric", apn.getNumeric()); contentValues.put("proxy", apn.getProxy()); contentValues.put("port", apn.getPort()); contentValues.put("authtype", apn.getAuthtype()); contentValues.put("current", apn.getCurrent()); contentValues.put("type", apn.getType()); contentValues.put("user", apn.getUser()); contentValues.put("server", apn.getServer()); contentValues.put("password", apn.getPassword()); contentValues.put("mmsport", apn.getMmsport()); contentValues.put("mmsproxy", apn.getMmsproxy()); contentValues.put("mmsc", apn.getMmsc()); Uri newUri = contentResolver.insert(createUri, contentValues); Log.i("ApnHelper","newUri.toString():" + newUri.toString()); return newUri; } |
APN的刪除
/** * 根據給定的id,刪除某個apn * @param id * @return是否成功 */ publicbooleandeleteApn(String id) { boolean flag =true; APN apn = new APN(); ContentValues contentValues =new ContentValues(); contentValues.put("current", apn.getCurrent()); ContentResolver contentResolver =context.getContentResolver(); try { contentResolver.delete(createUri,"_id=?",new String[] { id }); Log.i("ApnHelper","執行刪除操作"); } catch (NullPointerException e) { //TODO: handle exception e.printStackTrace(); flag =false; } return flag; } |
APN設置當前默認
/** * 設置默認的APN * @param id */ publicintsetDefault(int id) { Log.i("ApnHelper","執行設置當前默認操作"); ContentResolver contentResolver =context.getContentResolver(); ContentValues contentValues =new ContentValues(); contentValues.put("apn_id", id); int rows = contentResolver.update(preferapnUri, contentValues, null,null); Log.i("ApnHelper","設置當前值"); return rows; } |
關於APN的流程
關於設置當前默認的apn,應該在比較兩個list的時候,將需要設置爲當前默認使用的apn保存給一個對象,然後在修改的時候,重新得到所有可見的apn,遍歷他們,找到這個apn的id,最後設置當前默認的apn.
覺得這個流程圖忒不完整了。但是完整的圖也沒弄,關於設置當前默認的部分上面根本沒有體現,在完成這部分功能的時候,整個邏輯的判斷的難點大部分就是在設置默認這一塊。