操作APN的工具类
博客专区 > SuShine 的博客 > 博客详情
操作APN的工具类
SuShine 发表于2年前
操作APN的工具类
  • 发表于 2年前
  • 阅读 24
  • 收藏 0
  • 点赞 0
  • 评论 0

工具类

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;
	}

}


共有 人打赏支持
粉丝 118
博文 312
码字总数 79453
×
SuShine
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: