`

操作APN的工具类

 
阅读更多
package com.testaijia.apn;

import android.app.Activity;
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.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
 * 代码是人家的 我只是重新组合了一下 比较清晰
	http://blog.csdn.net/napolun007/article/details/5748595
 
 */
public class TestAijiaApnActivity extends Activity {

	private Button insertbtn;
	private TelephonyManager tm;
	private int apnd_id = 0;
	int m_oldApnId = -1;
	int m_oldNetWorkType = -1;
	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");

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		insertbtn = (Button) this.findViewById(R.id.insertApn);
		insertbtn.setOnClickListener(insertlis);
		resolver = getContentResolver();
		tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

	}

	private OnClickListener insertlis = new OnClickListener() {

		@Override
		public void onClick(View v) {

			deleteApn();// 先删除所有apn再添加
			apnd_id = InsetAPN();// 插入apn
			setDefaultApn(apnd_id);// 设置为默认apn
			getDefaultAPN();

			if (apnd_id != 0)
				Toast.makeText(TestAijiaApnActivity.this,
						String.valueOf(apnd_id), Toast.LENGTH_SHORT).show();
			else
				Toast.makeText(TestAijiaApnActivity.this,
						"insertAPN is unsuccess", Toast.LENGTH_SHORT).show();

		}

	};

	// 检查指定APN是否存在

	public int checkAPN() {
		ApnNode checkApn = new ApnNode();
		checkApn.setName("中国电信ctnet");
		checkApn.setApn("ctnet");
		checkApn.setMcc(getMCC());
		checkApn.setMnc(getMNC());
		checkApn.setNumeric(getSimOperator());
		return isApnExisted(checkApn);
	}

	// 添加一个APN
	private int InsetAPN() {
		ApnNode checkApn = new ApnNode();
		checkApn.setName("爱家物联专用接口");
		checkApn.setApn("ctnet");
		// checkApn.setProxy("10.0.0.200");
		// checkApn.setPort("80");
		checkApn.setUser("qdaj@qdaj.vpdn.sd");
		checkApn.setPassword("123456");
		checkApn.setMcc(getMCC());
		checkApn.setMnc(getMNC());
		checkApn.setNumeric(getSimOperator());
		return addNewApn(checkApn);

	}

	/**
	 * 判断一个apn是否存在 存在返回id
	 * 
	 * @param apnNode
	 * @return
	 */
	public int isApnExisted(ApnNode 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 ApnNode getDefaultAPN() {
		String id = "";
		String apn = "";
		String proxy = "";
		String name = "";
		String port = "";
		String type = "";
		String mcc = "";
		String mnc = "";
		String numeric = "";
		ApnNode apnNode = new ApnNode();
		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(ApnNode 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;
	}

	private String getMCC() {
		String numeric = tm.getSimOperator();
		String mcc = numeric.substring(0, 3);
		Log.i("MCC  is", mcc);
		return mcc;
	}

	private String getMNC() {

		String numeric = tm.getSimOperator();
		String mnc = numeric.substring(3, numeric.length());
		Log.i("MNC  is", mnc);
		return mnc;
	}

	private String getSimOperator() {
		String SimOperator = tm.getSimOperator();
		return SimOperator;
	}

}


package com.testaijia.apn;
/**
 * apn实体
 */
public class ApnNode {

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


分享到:
评论

相关推荐

    iOS创建EMM_APN证书流程.docx

    首先需要下载mdmvendorsign工具到AAA文件夹下,然后运行python mdm_vendor_sign.py --key private.key --csr push.csr --mdm mdm.cer --out applepush.csr。如果运行成功会出现提示upload the file之类的提示。如果...

    android好用的utils集合

    这个工具类可能提供了设置或修改APN的函数。 这些工具类集合极大地简化了Android开发中的常见任务,使开发者能更专注于核心功能的实现,提高了代码的可重用性。在实际项目中,合理地使用这些工具可以显著提升开发...

    demo_apn2.zip_DEMO_android移动数据

    这在许多场景下都是有用的,比如创建一个智能网络切换工具,或者在特定条件下自动选择网络连接方式的应用。不过,需要注意的是,随着Android版本的更新,对于移动数据的直接控制可能会受到更多限制,开发者需要时刻...

    Laravel开发-laravel-mobile-notification

    5. **发送通知**:一旦配置完成并收集了设备令牌,开发者就可以使用Laravel的Notification系统创建自定义的通知类,该类会指定如何格式化和发送通知。通过`Notification::send()`方法,可以批量发送通知给一组设备...

    APNSettings:充当 Android 设置的 APN 设置部分的快捷方式的 Android 应用程序

    1. `src/`:包含Java源代码文件,每个类对应一个`.java`文件,如主活动类(MainActivity.java)、APN配置类(APNConfig.java)等。 2. `res/`:资源文件夹,包括布局文件(XML格式)、图标(PNG或SVG)、字符串、...

    QMI拨号工具 ConnectionManager.rar

    需要注意的是,由于涉及到底层硬件通信,使用这类工具需要一定的技术背景,不恰当的操作可能会导致网络连接问题或者设备损坏。在使用前,建议仔细阅读相关文档和教程,确保正确操作。 总之,QMI拨号工具Connection...

    由APN幂函数构造 F 2 2n 上的置换

    描述中提到的APN幂函数是APN函数中最经典的一类,它们在F_2^n上具有特定的形式,比如形式为f(x)=x^3的函数。这些函数对于密码学应用而言,特别受到关注,因为它们可以构造出具有强非线性的置换。 在给定的文献中,...

    YeeCOM DTU配置工具V4.58.rar

    YeeCOM DTU配置工具是针对这类设备进行参数设置和管理的重要软件,版本V4.58提供了更为完善的配置功能和稳定性。本文将详细介绍YeeCOM DTU配置工具V4.58及其使用方法。 首先,了解DTU的基本功能。DTU的主要任务是...

    Java版水果管理系统源码-HopesUtils:安卓工具类集合,持续更新中,欢迎补充

    HopesUtils,安卓常见问题处理集合及工具类 --Activity不允许横竖屏切换 |--Activity常用小技巧 |--Activity按返回直接回到桌面 |--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂...

    Pyside6开发串口工具完整版本.docx

    7. **IP地址和APN信息**:针对无线通信场景,工具可提供填写和验证IP地址和APN的字段,确保网络连接的正确性。 8. **Ping包测试**:集成ping命令功能,用户可以直接通过工具向指定IP发送ping请求,查看网络连接的...

    移远EC20 QCOM at配置工具

    而“移远EC20 QCOM AT配置工具”则是一个专门用于配置和管理这类模块的软件,它可以帮助用户方便地进行模块的初始化设置、网络连接、数据传输等操作。 该配置工具的核心功能主要包括以下几个方面: 1. **模块配置*...

    手机连接工具

    标题中的“手机连接工具”通常指的是能够帮助手机与电脑或其他设备建立数据连接的应用或软件,这类工具常用于传输文件、共享网络或者进行设备调试。在描述中提到了它需要先建立连接,暗示这是一个类似拨号的软件,...

    DTU配置工具 F2X16工具 连接PC串口的调试工具

    DTU配置工具是专为此类设备设计的软件,帮助用户进行设备设置、连接测试和故障排查。"F2X16工具"是这种特定类型DTU的配置工具,它适用于F2X16系列的模块。 F2X16系列DTU是一款高性能、高可靠性的无线通信模块,支持...

    WinMobile WinCE 拨号上网配置软件

    在WinMobile和WinCE系统上,用户界面通常简洁直观,操作流程大致包括选择运营商、输入或选择APN、设置连接类型(如GPRS或3G)等步骤。 值得注意的是,由于这款软件专注于拨号上网配置,因此它可能不包含流量监控、...

    apndroid.zip

    【标题】"apndroid.zip" 是一个与Android操作系统相关的压缩包,可能包含了一个用于管理APN(Access Point Names)的应用或库。APN在Android系统中是至关重要的,因为它们定义了设备如何通过移动数据网络连接到...

    GPRS企业接入业务客户端设备应急故障操作.doc

    因此,对于这类问题的应急处理至关重要。中国移动通信集团网络服务中心制定了一份详细的操作指引,以确保快速有效地恢复服务。 **一、严重、紧急故障处理** 1. **故障处理原则**:在应对严重或紧急故障时,首要...

    brew 多媒体接口

    - **操作系统层**:负责调度和管理底层硬件资源。 - **API层**:为开发者提供高级别的接口,如IMedia接口。 - **应用层**:开发者在此层构建具体的多媒体应用。 #### 4. IMedia接口使用方法 使用IMedia接口时,...

    vpdn.rar_VPDN_android vp_android vpdn a_java vp_vpdn android

    2. **配置APN**:使用ContentResolver和Settings.System类,读取和写入APN设置。这包括APN名、APN类型、用户名、密码、服务器地址等。 3. **建立连接**:通过创建一个VPDN服务对象,调用其start方法启动VPDN连接。...

    Apndroid Push Notification实现安卓推送

    通过阅读源码,可以理解每个类和方法的作用,例如`FirebaseMessagingService`的实现,`BroadcastReceiver`如何监听点击事件,以及如何处理接收到的JSON消息。 6. **工具使用**: 使用第三方推送服务可以简化流程,...

    EM310模块的之_AT指令的熟悉,AT指令操作流程_第二部分:初始化模块

    AT指令集是控制这类模块的标准命令语言,它允许用户通过串行接口对模块进行配置和操作。在本部分中,我们将深入探讨EM310模块的初始化流程以及如何使用AT指令进行设置。 首先,我们要理解初始化模块的重要性。初始...

Global site tag (gtag.js) - Google Analytics