这几天工作中遇到了这样一个问题:应用是一个和平台端系统通过webservice对接的客户端程序,在手机端登录时需要保证网络是电信的C网(CTNET或者CTWAP),这其实就是运营商的网络限制方式,我们的应用不允许你用别的运营商的网络,虽说这种限制未必正确,不过实际中的确会遇到。

好了,对于现在正在用的APN的获取我们可以通过:

Cursor mCursor = this.getContentResolver().query(Uri.parse("content://telephony/carriers/preferapn"), null, null, null, null);

while(mCursor != null && mCursor.moveToNext())

{

String name = mCursor.getString(mCursor.getColumnIndex("name"));

System.out.println("网络连接------------->"+name);

}

然后通过

if(name.contains("中国电信")||name.contains("CT")||name.contains("ct"))

return true;

来判断是否符合我的APN的需要。

这是我之前的想法,事实证明,也许在单模手机上可以正确控制,但是如果在MOTO XT800这类双模手机上就会有问题了,因为当你把网络手动切换到G网时,从数据库中取到的APN名字仍然是之前设置的“中国电信***”之类的接入点,后来发现这种手机在网络设置中的移动网络设置项中有CDMA和GSM两项,也就是说CDMA有CDMA的preferapn,GSM有GSM的preferapn,虽然我手动把网络切换到了G网,但是从数据库中去取apn的时候还是从默认的CDMA项中取的,这样就导致了我无法判断用户是否在用G网登陆我的系统。

使用TelephonyManager也是一样的,无法判断,同样会从CDMA项中去取

//     TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);

//     if(tm.getNetworkType()==TelephonyManager.NETWORK_TYPE_CDMA) {

//      System.out.println("---------------------------C网-------------------------");

//     }

//     System.out.println("----------------------------------->"+tm.getNetworkType());

//     if(tm.getPhoneType()==TelephonyManager.PHONE_TYPE_CDMA) {

//      System.out.println("---------------------------C-------------------------");

//     }

后来查了google的文档,总算找了救星,就是:NetworkInfo

通过NetworkInfo的toString()方法可以查看到当前所用的网络的所有信息,当然这个NetworkInfo对象是通过ConnectivityManager对象的getActiveNetworkInfo()方法得到的,用以获取当前正在使用的NetworkInfo对象,代码如下:

public boolean checkNetWork() {

ConnectivityManager conMan = (ConnectivityManager) this

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo nwi = conMan.getActiveNetworkInfo();

System.out.println("nwi---------------------------->"+nwi);

String extraInfo = nwi.getExtraInfo();

System.out.println("extraInfo---------------------------->"+extraInfo);

if(extraInfo.contains("GSM"))

return false;

if(extraInfo.contains("#777:CDMA")) {

//     TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);

//     if(tm.getNetworkType()==TelephonyManager.NETWORK_TYPE_CDMA) {

//      System.out.println("---------------------------C网-------------------------");

//     }

//     System.out.println("----------------------------------->"+tm.getNetworkType());

//     if(tm.getPhoneType()==TelephonyManager.PHONE_TYPE_CDMA) {

//      System.out.println("---------------------------C-------------------------");

//     }

Cursor mCursor = this.getContentResolver().query(Uri.parse("content://telephony/carriers/preferapn"), null, null, null, null);

while(mCursor != null && mCursor.moveToNext())

{

String name = mCursor.getString(mCursor.getColumnIndex("name"));

System.out.println("网络连接------------->"+name);

if(name.contains("中国电信")||name.contains("CT")||name.contains("ct"))

return true;

}

}

return false;

}

linux设置apn脚本apn,Android学习之网络APN接入点控制相关推荐

  1. android apn切换工具,Android修改和添加APN网络

    由于工作中需要用到网络的判断和APN的切换,研究了一下Android中APN的修改和切换,关于APN的基础知识,这里就不在介绍了,自己百度就行! 直接进入正题: 1.建立一个android工程,需要如 ...

  2. linux 设置代理_用Android手机做电脑的HTTP代理服务器

    在手机端创建一个 HTTP 代理可以让电脑共享手机网络. 手机端 在 Play Store 里选择 Termux 安装. 其它备选 app : GNURoot Debian 等. 打开 Termux ...

  3. 【linux】shell脚本 ps 命令学习

    目录 1. ps 常用的命令 2. ps -ef 命令扩展使用 3. ps 命令的简单应用 Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 window ...

  4. linux java socket编程_深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

  5. Android学习:访问网络

    1.Get请求和Post请求简介 当客户端与服务器建立了网络链接之后,就可以发送Http请求了.Http请求通常分为Get请求和Post请求两种,下面分别介绍: 1.Get请求 Get:通过请求URI ...

  6. android 电信4gapn,电信apn怎么设置4g最快最稳定的网络?

    具体的设置方法如下: 1.首先要明确4G和APN的概念.4G是指第四代移动数字通讯网络系统.APN是一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络. 2. ...

  7. 嵌入式Linux+Android学习路线图

    嵌入式Linux+Android学习路线图 2016-08-01 韦东山 百问科技 网站/论坛:www.100ask.net,www.100ask.org 淘     宝:100ask.taobao. ...

  8. Android 1.5 的APN设定与上网处理

    手机上网分为wap和net两种方式,使用net手机就会直接连入互联网,而使用wap则会中间多了一个代理网关,移动联通均是10.0.0.172,端口80.而写与联网有关的代码,wap和net是不一样的: ...

  9. 嵌入式Linux+Android学习路线图+学习进度

    嵌入式Linux+Android学习路线图 转载:http://www.100ask.net/a/howtostudy/ 重拾Linux驱动,就按照百问网的步骤一步一步做,看自己最后能坚持到哪一步!! ...

  10. Android编译及编译脚本、Android构建基础学习笔记

    Android编译及编译脚本.Android构建基础学习笔记 Android编译及编译脚本 概述 Android.mk转换成Android.bp 例子(简单Android.mk文件转Android.b ...

最新文章

  1. vector、map删除当前记录
  2. SICP 习题 (2.7) 解题总结 : 定义区间数据结构
  3. 报文加解密原理_加密系统的组成与过程
  4. 简明python教程txt-Python:将 list 写入一个 txt 文件四种方法
  5. UML模型中的图-用例图
  6. java jinternalframe_JInternalFrame的使用
  7. sliverlight 开发FAQ
  8. [c++基本语法]——构造函数初始化列表
  9. xcode清除最近打开的文件列表
  10. http:(1):http简介
  11. mysql修改失败,mysql修改数据失败(是我的代码有问题吗)怎么解决?
  12. 产品设计:一层分类与多层分类模式的感悟
  13. 爬虫之Requests库
  14. vue.js 输入框金额限制
  15. 黑马程序员2022年最新软件测试学习路线
  16. 定制10kV变压器感应雷直击雷击变压器加避雷器atp-emtp模型
  17. 滤波算法(二)—— 中位值滤波算法
  18. 英特尔的新方向:称王集成计算设备领域
  19. 路由器的两个端口接在同一个交换机上_2个路由器怎么连接?
  20. AJAX+php实现分页器:分页展示数据

热门文章

  1. 【笔记整理】通信原理第九章复习——线性分组码
  2. Spark 推测执行
  3. 解除Windows XP IIS 10个并发连接数的限制
  4. 矩阵分解——满秩分解
  5. Make Cents? Gym - 101350M (水)
  6. innosetup 通过操作注册表来添加默认文件关联
  7. 餐厅扫码点餐怎么弄的(餐厅二维码自助点餐系统开发制作价格)
  8. 保护系统 WinXP故障恢复控制台完全指引
  9. 【kafka专栏】集成apache kafka-clients实现数据消费者
  10. c语言怎么把数字倒过来_如何用C语言将一个数字倒序过来