Android手机号码获取问题 用APN来获取手机号
原文 : http://www.cnblogs.com/growing/archive/2010/11/19/1881372.html
手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
那么手机号为什么有的就能显示呢?
这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。
如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。
移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。
具体处理代码:(程序在模拟器上无法实现,必须连接手机)
//创建电话管理
TelephonyManager tm = (TelephonyManager)
//与手机建立连接
activity.getSystemService(Context.TELEPHONY_SERVICE);
//获取手机号码
String phoneId = tm.getLine1Number();
//记得在manifest file中添加
<uses-permission
android:name="android.permission.READ_PHONE_STATE" />
************************************************************************************************************************************************************
http://www.eoeandroid.com/thread-91296-1-1.html
/**
* 电信APN列表
* @author wudongdong
*
*/
public class APNNET {
public static String CTWAP="ctwap";
public static String CTNET="ctnet";
}
/**
* 电信APN列表
* @author wudongdong
*
*/
public class APNNET {
public static String CTWAP="ctwap";
public static String CTNET="ctnet";
}
//获得APN的类型
/**
* 获得APN类型
* @author wudongdong
*
*/public class ApnUtil {
private static Uri PREFERRED_APN_URI = Uri
.parse("content://telephony/carriers/preferapn");/**
* get apntype
* @param context
* @return
*/public static String getApnType(Context context){
String apntype="nomatch";
Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,null, null, null, null);
c.moveToFirst();
String user=c.getString(c.getColumnIndex("user"));
if(user.startsWith(APNNET.CTNET)){
apntype=APNNET.CTNET;
}else if(user.startsWith(APNNET.CTWAP)){
apntype=APNNET.CTWAP;
}
return apntype;
}
}/**
* 获得APN类型
* @author wudongdong
*
*/
public class ApnUtil {
private static Uri PREFERRED_APN_URI = Uri
.parse("content://telephony/carriers/preferapn");/**
* get apntype
* @param context
* @return
*/public static String getApnType(Context context){
String apntype="nomatch";
Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,null, null, null, null);
c.moveToFirst();
String user=c.getString(c.getColumnIndex("user"));
if(user.startsWith(APNNET.CTNET)){
apntype=APNNET.CTNET;
}else if(user.startsWith(APNNET.CTWAP)){
apntype=APNNET.CTWAP;
}
return apntype;
}
}
获得手机号码的话可以传IMSI码到指定接口,接口地址不方便说。但可以透露一点,必须走CTWAP,这也是判断APN类型的原因,发现很多应用如果APN是走代理的话就不能联网,那么再介绍一下用APN设置网络的代理信息。
Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,null, null, null, null);
c.moveToFirst();
String proxy=c.getString(c.getColumnIndex("proxy"));if (!"".equals(proxy) && proxy!=null) {
Properties prop = System.getProperties();
System.getProperties().put("proxySet", "true");
prop.setProperty("http.proxyHost", c.getString(c.getColumnIndex("proxy")));
prop.setProperty("http.proxyPort", c.getString(c.getColumnIndex("port")));
String authentication = c.getString(c.getColumnIndex("user"))
+ ":" + c.getString(c.getColumnIndex("password"));
String encodedLogin = Base64.encode(authentication);
uc.setRequestProperty("Proxy-Authorization", " BASIC "
+ encodedLogin);
}c.close();
Android手机号码获取问题 用APN来获取手机号相关推荐
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- 【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 )
文章目录 一.获取对象类型分析 二.替换 Application 时机 一.获取对象类型分析 在 [Android 安全]DEX 加密 ( Application 替换 | 获取 ContextImp ...
- 【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 | 源码分析 )
文章目录 一.获取对象类型分析 二.获取 ContextImpl 类型对象 三.获取 ActivityThread.LoadedApk 类型对象 dex 解密时 , 需要将 代理 Applicatio ...
- android通话记录列表apk,android打电话,发短信,获取通讯录、通话记录、短信记录...
[实例简介] 代码实现android打电话,发短信,获取通讯录.通话记录.短信记录 [实例截图] [核心代码] 19287b5f-b70c-4210-ab04-9d24ddd60788 └── cal ...
- android判断参数非空,Android Studio注释模板Live Templates参数获取不到为null的一些
Android Studio注释模板Live Templates参数获取不到为null的一些 Android Studio注释模板Live Templates参数获取不到为null的一些解决方法 提示 ...
- android xml获取指定,android:如何从xml文件中获取信息?
我得到一个程序,从一个链接的服务器获取天气.我已经做了一些将字符串结合到URL的字符串.我现在需要从XML文件中获取信息.android:如何从xml文件中获取信息? 这是我的代码:(我更换了,为了安 ...
- android item 点击 获取position,Android ListView 子控件onClick正确获取position的方法
在实际开发中,我们有时候不仅需要响应ListView的onItemClick,还需要响应其子控件的点击事件,这个时候我们就会 发现,由于复用等原因,如果直接在子控件的onClick事件中调用getVi ...
- android动态mac地址,Android 版本兼容 — Android 6.0 和 7.0后获取Mac地址
Android 6.0 和 7.0后获取Mac地址 随着Android的版本迭代,获取设备的Mac地址也发生了改变.这里找到了最新的适配方案(适配当前的最新版本Android 9.0),并且记录了整个 ...
- Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据
如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 目标 Android手机HC-05蓝牙连接Arduino nano获取DHT-11温 ...
最新文章
- python unittest断言大全_Python-unittest框架 断言使用
- jQuery(function(){...})与(function($){...})(jQuery)的“兄弟”情结
- 微信支付 - 支付中心回调通知
- 酷派android是什么系统版本,酷派大神X7的手机系统是什么?能升级安卓5.0吗?
- 叮咚!你有一份来自明源云的圣诞邀约
- “约见”面试官系列之常见面试题第五篇说说vuex登录信息(建议收藏)
- 写了 10 年代码之后,我学到的 7 个绝对真理
- 防止表单按钮多次提交
- Intel 4004,世界上首个CPU,进不惑之年
- 高效实用Kafka-入门介绍
- 【万字长文】探讨可信构架之道
- 在线JSON转HTML,TABLE表格工具
- python代码翻译器-python写的翻译代码
- java keytool 导出证书,keytool 导出证书
- Nessus安装与使用
- html中div中加背景图片,div background css设置div背景图片
- excel的poi和EasyExcel的基本读写
- 小程序后端云开发(一)
- 知识点滴- BC和BCE的区别
- hibernate 一对多查询 对多的一方进行分页
热门文章
- Encoder-Decoder框架与Attention机制
- Android之UiAutomator测试框架源码分析(第二十四篇:ByMatcher相关功能介绍)
- 4位共阴极数码管的动态扫描电路VHDL设计
- ESP8266红外学习遥控器
- 信息安全——密码学(上)
- 基于Python实现的HTTP代理服务器设计
- Failed to decode response: zlib_decode(): data error Retrying with degraded mode, check
- Java API在HDFS上实现文件的上传、下载到本地、创建文件夹、删除文件和重命名文件
- matlab绘制空间摆线轨迹
- 高通820(msm8996)camera hal源码分析