android APN解析

news/2024/7/7 14:54:32

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,遍历他们,找到这个apnid,最后设置当前默认的apn.

 

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



转载地址:http://blog.csdn.net/zidan_2011/article/details/7704865


http://www.niftyadmin.cn/n/3648833.html

相关文章

Symbian中的iScanCode和iCode

我们知道在Symbian的按键事件处理中使用以下方法:TKeyResponse CMegajoyContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)这个方法是在CCoeControl(Control base class from which all other controls are derived)中定义的虚函数,其定义如下:Off…

如何在Ubuntu 18.04上使用Apache设置密码身份验证

介绍 (Introduction) As a web administrator, you may find it valuable to restrict some parts of a website from visitors, whether temporarily or on a permanent basis. While web applications may provide their own authentication and authorization methods, you …

Java疑惑点解析(二)

用过C的人都知道,C中有个"拷贝构造函数"的概念。这个概念是为了解决C中把一个对象指针赋值给另外一个对象指针,从而两个指针指向同一块内存区域而提出的。 同样,Java做为一门高级语言,它也无法避免这样的问题。Java中没有"拷贝构造函数"的概念,而是…

android开发中的权限与权限获取

访问登记属性android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限获取错略位置android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1…

拦截Activity的启动流程绕过AndroidManifest检测

首先非常简单启动activity public void skip(View view){Intent intentnew Intent(this,TestActivity.class);startActivity(intent);} 这里TestActivity没有进行注册 HookStartActivityUtil工具封装类 public class HookStartActivityUtil {private String TAG "HookS…

汇编中一个有趣的问题

int main(){ int a1; int b2; int c-1;} 问题是下面哪个关系成立: &a>&b>&c还是&a<&b<&c? 我们知道局部变量是存放在栈中的,a先PUSH,然后是b,最后是c。 而栈指针SP是从高地址→低地址方向移动的,所以&a>&b>&am…

如何在Node.js中编写异步代码

The author selected the Open Internet/Free Speech Fund to receive a donation as part of the Write for DOnations program. 作者选择了“ 开放互联网/言论自由基金会”作为“ Write for DOnations”计划的一部分来接受捐赠。 介绍 (Introduction) For many programs in …

Android Webview遇到的问题——记新版广告墙开发

前一阵很辛劳&#xff0c;所以荒废了博客。前几天终于完成了这项艰苦卓绝的工程&#xff1a;HTML5版广告墙&#xff0c;决定写篇文章&#xff0c;记录一下踩过的坑。 项目介绍 广告墙属于典型的列表式应用&#xff1a;打开后是无尽列表&#xff0c;通过滑动手指驱使列表滚动&am…