操作APN的工具类
工具类
package com.example.apnutil; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.net.Uri; import android.telephony.TelephonyManager; import android.util.Log; public class ApnUtil { private Context context; private int apnd_id = 0; int m_oldApnId = -1; int m_oldNetWorkType = -1; private TelephonyManager tm; private ContentResolver resolver; private static final Uri APN_TABLE_URI = Uri .parse("content://telephony/carriers"); private static final Uri PREFERRED_APN_URI = Uri .parse("content://telephony/carriers/preferapn"); public ApnUtil(Context context) { super(); this.context = context; resolver = context.getContentResolver(); tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); } /** * 判断一个apn是否存在 存在返回id * * @param apnNode * @return */ public int isApnExisted(ApnEntity apnNode) { int apnId = -1; Cursor mCursor = resolver.query(APN_TABLE_URI, null, null, null, null); while (mCursor != null && mCursor.moveToNext()) { apnId = mCursor.getShort(mCursor.getColumnIndex("_id")); String name = mCursor.getString(mCursor.getColumnIndex("name")); String apn = mCursor.getString(mCursor.getColumnIndex("apn")); String type = mCursor.getString(mCursor.getColumnIndex("type")); String proxy = mCursor.getString(mCursor.getColumnIndex("proxy")); String port = mCursor.getString(mCursor.getColumnIndex("port")); String current = mCursor.getString(mCursor .getColumnIndex("current")); String mcc = mCursor.getString(mCursor.getColumnIndex("mcc")); String mnc = mCursor.getString(mCursor.getColumnIndex("mnc")); String numeric = mCursor.getString(mCursor .getColumnIndex("numeric")); Log.e("isApnExisted", "info:" + apnId + "_" + name + "_" + apn + "_" + type + "_" + current + "_" + proxy);// 遍历了所有的apn if (/* apnNode.getName().equals(name) */(apnNode.getApn().equals( apn) && apnNode.getMcc().equals(mcc) && apnNode.getMnc().equals(mnc) && apnNode.getNumeric() .equals(numeric)) && (type == null || "default".equals(type) || "" .equals(type)))// || (apnNode.getApn().equals(apn) // && "".equals(proxy) && // "".equals(port)) { return apnId; } else { apnId = -1; } } return apnId; } /** * 获取默认的apn */ public ApnEntity getDefaultAPN() { String id = ""; String apn = ""; String proxy = ""; String name = ""; String port = ""; String type = ""; String mcc = ""; String mnc = ""; String numeric = ""; ApnEntity apnNode = new ApnEntity(); Cursor mCursor = resolver.query(PREFERRED_APN_URI, null, null, null, null); if (mCursor == null) { // throw new Exception("Non prefer apn exist"); return null; } while (mCursor != null && mCursor.moveToNext()) { id = mCursor.getString(mCursor.getColumnIndex("_id")); name = mCursor.getString(mCursor.getColumnIndex("name")); apn = mCursor.getString(mCursor.getColumnIndex("apn")) .toLowerCase(); proxy = mCursor.getString(mCursor.getColumnIndex("proxy")); port = mCursor.getString(mCursor.getColumnIndex("port")); mcc = mCursor.getString(mCursor.getColumnIndex("mcc")); mnc = mCursor.getString(mCursor.getColumnIndex("mnc")); numeric = mCursor.getString(mCursor.getColumnIndex("numeric")); Log.d("getDefaultAPN", "default Apn info:" + id + "_" + name + "_" + apn + "_" + proxy + "_" + proxy); } apnNode.setName(name); apnNode.setApn(apn); apnNode.setProxy(proxy); apnNode.setPort(port); apnNode.setMcc(mcc); apnNode.setMnc(mnc); apnNode.setNumeric(numeric); return apnNode; } /** * 设置默认的apn * * @param apnId * @return */ public boolean setDefaultApn(int apnId) { boolean res = false; 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) { } return res; } /** * 删除所有apn */ public void deleteApn() { resolver.delete(APN_TABLE_URI, null, null); } /** * 增加新的apn * * @param apnNode * @return */ public int addNewApn(ApnEntity apnNode) { int apnId = -1; ContentValues values = new ContentValues(); values.put("name", apnNode.getName()); values.put("apn", apnNode.getApn()); values.put("proxy", apnNode.getProxy()); values.put("port", apnNode.getPort()); values.put("user", apnNode.getUser()); values.put("password", apnNode.getPassword()); values.put("mcc", apnNode.getMcc()); values.put("mnc", apnNode.getMnc()); values.put("numeric", apnNode.getNumeric()); // Note: this values need to be update, and for now, it only for XT800. Cursor c = null; try { Uri newRow = resolver.insert(APN_TABLE_URI, values); if (newRow != null) { c = resolver.query(newRow, null, null, null, null); int idindex = c.getColumnIndex("_id"); c.moveToFirst(); apnId = c.getShort(idindex); Log.d("Robert", "New ID: " + apnId + ": Inserting new APN succeeded!"); } } catch (SQLException e) { } if (c != null) c.close(); return apnId; } public String getMCC() { String numeric = tm.getSimOperator(); String mcc = numeric.substring(0, 3); Log.i("MCC is", mcc); return mcc; } public String getMNC() { String numeric = tm.getSimOperator(); String mnc = numeric.substring(3, numeric.length()); Log.i("MNC is", mnc); return mnc; } public String getSimOperator() { String SimOperator = tm.getSimOperator(); return SimOperator; } }
实体
package com.example.apnutil; /** * apn实体 */ public class ApnEntity { private String name; private String apn; private String proxy; private String port; private String user; private String server; private String password; private String mmsc; private String mmsproxy; private String mmsport; private String mcc; private String mnc; private String numeric; private String type; /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * @return the apn */ public String getApn() { return apn; } /** * @param apn * the apn to set */ public void setApn(String apn) { this.apn = apn; } /** * @return the proxy */ public String getProxy() { return proxy; } /** * @param proxy * the proxy to set */ public void setProxy(String proxy) { this.proxy = proxy; } /** * @return the port */ public String getPort() { return port; } /** * @param port * the port to set */ public void setPort(String port) { this.port = port; } /** * @return the user */ public String getUser() { return user; } /** * @param user * the user to set */ public void setUser(String user) { this.user = user; } /** * @return the server */ public String getServer() { return server; } /** * @param server * the server to set */ public void setServer(String server) { this.server = server; } /** * @return the password */ public String getPassword() { return password; } /** * @param password * the password to set */ public void setPassword(String password) { this.password = password; } /** * @return the mmsc */ public String getMmsc() { return mmsc; } /** * @param mmsc * the mmsc to set */ public void setMmsc(String mmsc) { this.mmsc = mmsc; } /** * @return the mmsproxy */ public String getMmsproxy() { return mmsproxy; } /** * @param mmsproxy * the mmsproxy to set */ public void setMmsproxy(String mmsproxy) { this.mmsproxy = mmsproxy; } /** * @return the mmsport */ public String getMmsport() { return mmsport; } /** * @param mmsport * the mmsport to set */ public void setMmsport(String mmsport) { this.mmsport = mmsport; } /** * @return the mcc */ public String getMcc() { return mcc; } /** * @param mcc * the mcc to set */ public void setMcc(String mcc) { this.mcc = mcc; } /** * @return the mnc */ public String getMnc() { return mnc; } /** * @param mnc * the mnc to set */ public void setMnc(String mnc) { this.mnc = mnc; } /** * @return the numeric */ public String getNumeric() { return numeric; } /** * @param numeric * the numeric to set */ public void setNumeric(String numeric) { this.numeric = numeric; } /** * @return the type */ public String getType() { return type; } /** * @param type * the type to set */ public void setType(String type) { this.type = type; } }
测试activity
package com.example.apnutil; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { private ApnUtil apnUtil; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); apnUtil = new ApnUtil(this); //initApn(); restoreApn(); } /** * 恢復爲移動的apn */ private void restoreApn() { ApnEntity checkApn = new ApnEntity(); checkApn.setName("中国移动"); checkApn.setApn("cmnet"); checkApn.setUser(""); checkApn.setPassword(""); checkApn.setMcc(apnUtil.getMCC()); checkApn.setMnc(apnUtil.getMNC()); checkApn.setNumeric(apnUtil.getSimOperator()); int apnId = apnUtil.isApnExisted(checkApn); if (apnId==-1) { Log.e("apn", "不存在apn创建一个"+apnId); apnId = apnUtil.addNewApn(checkApn); } apnUtil.setDefaultApn(apnId); } /** * 初始化一個apn 并设置为默认 */ private void initApn() { ApnEntity checkApn = new ApnEntity(); checkApn.setName("三方平台接口"); checkApn.setApn("lsrs.qd.sd"); checkApn.setUser(""); checkApn.setPassword(""); checkApn.setMcc(apnUtil.getMCC()); checkApn.setMnc(apnUtil.getMNC()); checkApn.setNumeric(apnUtil.getSimOperator()); int apnId = apnUtil.isApnExisted(checkApn); if (apnId==-1) { Log.e("apn", "不存在apn创建一个"+apnId); apnId = apnUtil.addNewApn(checkApn); } apnUtil.setDefaultApn(apnId); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }