android 设置APN

android的APN设置,也就是移动网络的接入点设置,有些时候可能项目需要会用到一些专用的apn专网,如果需要用户去手动设置的话显然可行性不高,所以需要在代码中自动为客户生成一个接入点,并在应用启动的时候自动切换到改接入点,退出的时候重新换回用户的默认接入点,这里只讲关键技术点,具体实现自行研究,实践才能出真知; 1、首先了解一下APN的位置, // APN列表资源 private static Uri APN_LIST_URI = Uri.parse(“content://telephony/carriers”); // 默认APN资源(当前正在使用的apn) private static Uri PREFERRED_APN_URI = Uri.parse(“content://telephony/carriers/preferapn”); 2、检测一个APN是否存 int id = -1; ContentResolver resolver = context.getContentResolver(); Cursor c = resolver.query(APN_LIST_URI, new String[] { “_id”, “name”, “apn” }, “apn like ‘%myapn%’”, null, null); //从apn列表中查找apn名称为myapn的apn信息 if (c != null && c.moveToNext()) { id = c.getShort(c.getColumnIndex(“_id”)); //获取该apn的id信息 System.out.println(“APN已经存在”); } else { System.out.println(“APN不存在”); } 3、添加一个新的APN,设置apn的信息还需要获取当前SIM卡的运营商信息 protected String getSIMInfo() { TelephonyManager iPhoneManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return iPhoneManager.getSimOperator(); } public int AddXFTApn() { System.out.println(“添加一个新的apn ==> XFT APN”); int apnId = -1; String NUMERIC = getSIMInfo(); if (NUMERIC == null) { Toast.makeText(context, “不存在SIM卡”, Toast.LENGTH_SHORT).show(); return -1; } ContentResolver resolver = context.getContentResolver(); ContentValues values = new ContentValues(); values.put(“name”,“专用APN”); //apn中文描述 values.put(“apn”, “myapn”); //apn名称 values.put(“type”, “default,supl”); values.put(“numeric”, NUMERIC); values.put(“mcc”, NUMERIC.substring(0, 3)); values.put(“mnc”, NUMERIC.substring(3, NUMERIC.length())); values.put(“proxy”, “”); values.put(“port”, “”); values.put(“mmsproxy”, “”); values.put(“mmsport”, “”); values.put(“user”, “”); values.put(“server”, “”); values.put(“password”, “”); values.put(“mmsc”, “”); Cursor c = null; // 获取新添加的apn的ID try { Uri newRow = resolver.insert(APN_LIST_URI, values); if (newRow != null) { c = resolver.query(newRow, null, null, null, null); int idindex = c.getColumnIndex(“_id”); c.moveToFirst(); apnId = idindex; } } catch (SQLException e) { e.printStackTrace(); } if (c != null) c.close(); return apnId; } 4、设置使用指定的apn接入点连接网络 public boolean setDefaultApn(int apnId) { // System.out.println(“设置选中的apnID ==》 “ + apnId); boolean res = false; ContentResolver resolver = context.getContentResolver(); ContentValues values = new ContentValues(); values.put(“apn_id”, apnId); try { resolver.update(PREFERRED_APN_URI, values, null, null); Cursor c = resolver.query(PREFERRED_APN_URI, new String[] { “name”, “apn” }, “_id=” + apnId, null, null); if (c != null) { res = true; c.close(); } } catch (SQLException e) { e.printStackTrace(); } return res; }