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.
觉得这个流程图忒不完整了。但是完整的图也没弄,关于设置当前默认的部分上面根本没有体现,在完成这部分功能的时候,整个逻辑的判断的难点大部分就是在设置默认这一块。