android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .
下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码
准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境
第一步:新建一个android工程(JinshanTest),
并需要在工程的AndroidManifest.xml文件中,添加权限
图例:
第二步:新建一个工具类PhoneInfo.java
packagecom.jinshan.test;
importandroid.content.Context;
importandroid.telephony.TelephonyManager;
/**
* 读取手机设备信息测试代码
* http://www.souapp.com 搜应用网
* song2c@163.com
* 宋立波
*/
publicclassPhoneInfo {
privateTelephonyManager telephonyManager;
/**
* 国际移动用户识别码
*/
privateString IMSI;
privateContext cxt;
publicPhoneInfo(Context context) {
cxt=context;
telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
}
/**
* 获取电话号码
*/
publicString getNativePhoneNumber() {
String NativePhoneNumber=null;
NativePhoneNumber=telephonyManager.getLine1Number();
returnNativePhoneNumber;
}
/**
* 获取手机服务商信息
*/
publicString getProvidersName() {
String ProvidersName ="N/A";
try{
IMSI = telephonyManager.getSubscriberId();
// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
System.out.println(IMSI);
if(IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
ProvidersName ="中国移动";
}elseif(IMSI.startsWith("46001")) {
ProvidersName ="中国联通";
}elseif(IMSI.startsWith("46003")) {
ProvidersName ="中国电信";
}
}catch(Exception e){
e.printStackTrace();
}
returnProvidersName;
}
publicString getPhoneInfo(){
TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);
StringBuilder sb =newStringBuilder();
sb.append("\nDeviceId(IMEI) = "+ tm.getDeviceId());
sb.append("\nDeviceSoftwareVersion = "+ tm.getDeviceSoftwareVersion());
sb.append("\nLine1Number = "+ tm.getLine1Number());
sb.append("\nNetworkCountryIso = "+ tm.getNetworkCountryIso());
sb.append("\nNetworkOperator = "+ tm.getNetworkOperator());
sb.append("\nNetworkOperatorName = "+ tm.getNetworkOperatorName());
sb.append("\nNetworkType = "+ tm.getNetworkType());
sb.append("\nPhoneType = "+ tm.getPhoneType());
sb.append("\nSimCountryIso = "+ tm.getSimCountryIso());
sb.append("\nSimOperator = "+ tm.getSimOperator());
sb.append("\nSimOperatorName = "+ tm.getSimOperatorName());
sb.append("\nSimSerialNumber = "+ tm.getSimSerialNumber());
sb.append("\nSimState = "+ tm.getSimState());
sb.append("\nSubscriberId(IMSI) = "+ tm.getSubscriberId());
sb.append("\nVoiceMailNumber = "+ tm.getVoiceMailNumber());
returnsb.toString();
}
}
package com.jinshan.test;
import android.content.Context;
import android.telephony.TelephonyManager;
/**
* 读取手机设备信息测试代码
* http://www.souapp.com 搜应用网
* song2c@163.com
* 宋立波
*/
public class PhoneInfo {
private TelephonyManager telephonyManager;
/**
* 国际移动用户识别码
*/
private String IMSI;
private Context cxt;
public PhoneInfo(Context context) {
cxt=context;
telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
}
/**
* 获取电话号码
*/
public String getNativePhoneNumber() {
String NativePhoneNumber=null;
NativePhoneNumber=telephonyManager.getLine1Number();
return NativePhoneNumber;
}
/**
* 获取手机服务商信息
*/
public String getProvidersName() {
String ProvidersName = "N/A";
try{
IMSI = telephonyManager.getSubscriberId();
// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
System.out.println(IMSI);
if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
ProvidersName = "中国移动";
} else if (IMSI.startsWith("46001")) {
ProvidersName = "中国联通";
} else if (IMSI.startsWith("46003")) {
ProvidersName = "中国电信";
}
}catch(Exception e){
e.printStackTrace();
}
return ProvidersName;
}
public String getPhoneInfo(){
TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);
StringBuilder sb = new StringBuilder();
sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());
sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());
sb.append("\nLine1Number = " + tm.getLine1Number());
sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());
sb.append("\nNetworkOperator = " + tm.getNetworkOperator());
sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());
sb.append("\nNetworkType = " + tm.getNetworkType());
sb.append("\nPhoneType = " + tm.getPhoneType());
sb.append("\nSimCountryIso = " + tm.getSimCountryIso());
sb.append("\nSimOperator = " + tm.getSimOperator());
sb.append("\nSimOperatorName = " + tm.getSimOperatorName());
sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());
sb.append("\nSimState = " + tm.getSimState());
sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());
sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());
return sb.toString();
}
}
第三步:在启动的Activity,JinshanTestActivity中添加,调用代码:
packagecom.jinshan.test;
importandroid.app.Activity;
importandroid.os.Bundle;
publicclassJinshanTestActivityextendsActivity {
/** Called when the activity is first created. */
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PhoneInfo siminfo =newPhoneInfo(JinshanTestActivity.this);
System.out.println("getProvidersName:"+siminfo.getProvidersName());
System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());
System.out.println("------------------------");
System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());
}
}
package com.jinshan.test;
import android.app.Activity;
import android.os.Bundle;
public class JinshanTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);
System.out.println("getProvidersName:"+siminfo.getProvidersName());
System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());
System.out.println("------------------------");
System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());
}
}
第四步,把手机使用USB线,连接到电脑上,确保是连通性,开始运行工程
最后,我们看LOGCAT日志,结果如下:
------------------------------------------------------------
04-01 16:20:57.105: I/System.out(952): 460003121934674
04-01 16:20:57.105: I/System.out(952): getProvidersName:中国移动
04-01 16:20:57.115: I/System.out(952): getNativePhoneNumber:136XXXXXXX
04-01 16:20:57.115: I/System.out(952): ------------------------
04-01 16:20:57.145: I/System.out(952): getPhoneInfo:
04-01 16:20:57.145: I/System.out(952): DeviceId(IMEI) = 352XXXXXXXX61328
04-01 16:20:57.145: I/System.out(952): DeviceSoftwareVersion = 01
04-01 16:20:57.145: I/System.out(952): Line1Number = 136XXXXXXX
04-01 16:20:57.145: I/System.out(952): NetworkCountryIso = cn
04-01 16:20:57.145: I/System.out(952): NetworkOperator = 46000
04-01 16:20:57.145: I/System.out(952): NetworkOperatorName = 中国移动
04-01 16:20:57.145: I/System.out(952): NetworkType = 2
04-01 16:20:57.145: I/System.out(952): PhoneType = 1
04-01 16:20:57.145: I/System.out(952): SimCountryIso = cn
04-01 16:20:57.145: I/System.out(952): SimOperator = 46000
04-01 16:20:57.145: I/System.out(952): SimOperatorName = CMCC
04-01 16:20:57.145: I/System.out(952): SimSerialNumber = 898xxxxxx90108
04-01 16:20:57.145: I/System.out(952): SimState = 5
04-01 16:20:57.145: I/System.out(952): SubscriberId(IMSI) = 46000xxxxxxxx4674
那么我们来解释一下上面的信息具体代表啥意思。
getNativePhoneNumber获取的手机号
DeviceId(IMEI)手机 国际移动用户识别码
NetworkOperator 移动运营商编号
NetworkOperatorName 移动运营商名称
SimSerialNumber SimOperator SimCountryIso SimSerialNumber SubscriberId(IMSI) 关于手机SIM卡的一些详细信息
其实代码中没有写 获取System.ANDROID_ID这个操作,因为很多手机设备获取不到andnroid_id
当然了,我们今天主要讲述 光使用这个权限我们可以获得的手机设备信息和手机号
如果想获得WIFI,蓝牙,GPS,读写SDCARD更多的信息,就需要添加其它的权限。
此外,本次测试我拿自己的手机SIM卡测试是可以获取到手机号码的,当然了有些手机号码是获取不到的,这里也给大家罗列了原因,
手机号码不是所有的都能获取。只是有一部分可以拿到。
这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
那么手机号为什么有的就能显示呢?
这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。
如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。
移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。
android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .相关推荐
- android 安卓APP获取手机设备信息和手机号码的代码示例
下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...
- android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例
下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...
- 如何获取手机设备信息和手机号码
下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和Android-sdk开发环境 第一步:新建一个andro ...
- Android中获取手机设备信息、RAM、ROM存储信息,如宽、高、厂商名、手机品牌
借鉴:https://www.jianshu.com/p/ca869aa2fd72 今天有两个工具类总结,代码里都有注释,直接看代码. 一.首先第一个,主要获取手机设备信息DeviceInfoUtil ...
- js获取PC设备信息,js获取手机设备信息,最全
获取设备系统和型号<封装方法> <!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...
- Android 获取app 地址,获取手机设备信息、app版本信息、ip地址
获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...
- html5 手机 消息,H5获取手机设备信息、app版本信息、ip地址
获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...
- android手机获取手机设备信息
在有的项目中需要根据特定的手机信息来进行处理,这时就需要我们来获取手机的设备信息了,那首先看看我的测试机的一些基本信息: 那么这些信息怎么获得呢??其实都封装在了TelephonyManager中,我 ...
- Android获取手机设备信息并区分真机与模拟器
有些时候我们不想App在模拟器上被别人使用,所以我们禁止在模拟器上使用App 判断是否为真机: 根据以下四图,我们可以对真机与模拟器来做一个简单区分: 如果Serial码为unkonwn或者andro ...
最新文章
- navicat for mysql收藏夹
- R语言与数据分析(1) 数据分析流程、数据挖掘、数据可视化
- php禁止伪造_php防止伪造的数据从URL提交方法
- CentOS 7核心安装及基本配置
- mysql数据库系统配置文件_跟我学虚拟机系统平台相关技术及应用——在CentOS系统中的MySql数据库系统配置文件中进行配置定义...
- android 屏幕禁止,Android应用禁止屏幕休眠的几种方法
- 解决error 1045: Access denied for user: 'root@localhost' (Using password: YES)
- office 高效办公智慧树_干货高效实用的office办公小技巧之word篇
- nssl1489-大冰隙2【树链剖分,线段树】
- 简述C++程序编写的过程
- 锐驰机器人的市场_【年终盘点】2020年,锐驰的王炸新品!
- 饼图大小调整_这么漂亮的双层饼图,你会做吗?让你工作汇报更出彩!
- X命名空间-标记扩展
- cshop是什么开发语言_C语言是用什么语言编写出来的?
- less中mixins与extend的区别
- ios keychain 不被清理_限免 | 可爱天气 清理君等等
- 评价——秩和比综合评价
- 编辑器漏洞、越权、逻辑漏洞(不安全的对象引用、功能级别访问控制缺失)
- 在线世界地图生成器 pixelmap可调色
- 基于法律裁判文书的法律判决大数据预测