Android获取手机设备识别码(IMEI)和手机号码
最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考
必要的条件还是一部真机,SIM卡或者UIM卡。
首先,在AndroidMainfest.xml里获取权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>。
其次,新建一个工具类PhoneInfo.java,主要用来获取手机设备信息(附上源码):
package com.wx.deviceid; import android.content.Context;
import android.telephony.TelephonyManager; public class PhoneInfo {
private TelephonyManager telephonemanager;
private String IMSI;
private Context ctx;
/**
* 获取手机国际识别码IMEI
* */
public PhoneInfo(Context context){
ctx=context;
telephonemanager=(TelephonyManager)context
.getSystemService(Context.TELEPHONY_SERVICE);
} /**
* 获取手机号码
* */
public String getNativePhoneNumber(){ String nativephonenumber=null;
nativephonenumber=telephonemanager.getLine1Number(); return nativephonenumber;
} /**
* 获取手机服务商信息
*
* */
public String getProvidersName(){
String providerName=null;
try{
IMSI=telephonemanager.getSubscriberId();
//IMSI前面三位460是国家号码,其次的两位是运营商代号,00、02是中国移动,01是联通,03是电信。
System.out.print("IMSI是:"+IMSI);
if(IMSI.startsWith("")||IMSI.startsWith("")){
providerName="中国移动";
}else if(IMSI.startsWith("")){
providerName="中国联通";
}else if(IMSI.startsWith("")){
providerName="中国电信";
} }catch(Exception e){
e.printStackTrace();
}
return providerName; }
/**
* 获取手机信息
* */
public String getPhoneInfo(){ TelephonyManager tm=(TelephonyManager)ctx.getSystemService(Context.TELEPHONY_SERVICE);
StringBuilder sb=new StringBuilder(); sb.append("\nDeviceID(IMEI)"+tm.getDeviceId());
sb.append("\nDeviceSoftwareVersion:"+tm.getDeviceSoftwareVersion());
sb.append("\ngetLine1Number:"+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("\ngetSimState:"+tm.getSimState());
sb.append("\nSubscriberId:"+tm.getSubscriberId());
sb.append("\nVoiceMailNumber:"+tm.getVoiceMailNumber()); return sb.toString(); }
}
然后,再在启动的PhoneActivity中,添加调用代码:
package com.wx.deviceid;
/**
* 获取手机设备测试信息
* @author wangxiang
* 2013-9-17
* */
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu; public class PhoneActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.phone, menu);
PhoneInfo siminfo=new PhoneInfo(PhoneActivity.this); System.out.println("\ngetprovider:"+siminfo.getProvidersName());
System.out.println("\ngeNativePhoneNumber:"+siminfo.getNativePhoneNumber());
System.out.println("--------w---x---------");
System.out.println("\ngetphoneinfo:"+siminfo.getPhoneInfo());
return true;
} }
第四,完成以上两步就可以在真机上运行了,为了查看输出信息的方便,可以在logcat中,单独查看System.out的信息,
方法是点击那个绿色的“+”,如图:
,
然后在弹出框中的Filter name 和 By log tag里面均填入System.out。
好了,现在可以运行项目了,查看一下logcat结果:
09-17 17:42:49.924: I/System.out(2854): IMSI是:460023217433621
09-17 17:42:49.925: I/System.out(2854): getprovider:中国移动
09-17 17:42:49.931: I/System.out(2854): geNativePhoneNumber:
09-17 17:42:49.932: I/System.out(2854): --------w---x---------
09-17 17:42:49.970: I/System.out(2854): getphoneinfo:
09-17 17:42:49.970: I/System.out(2854): DeviceID(IMEI)863581011235194
09-17 17:42:49.970: I/System.out(2854): DeviceSoftwareVersion:78
09-17 17:42:49.971: I/System.out(2854): getLine1Number:
09-17 17:42:49.971: I/System.out(2854): NetworkCountryIso:cn
09-17 17:42:49.972: I/System.out(2854): NetworkOperator:46000
09-17 17:42:49.972: I/System.out(2854): NetworkOperatorName:中国移动
09-17 17:42:49.972: I/System.out(2854): NetworkType:2
09-17 17:42:49.972: I/System.out(2854): PhoneType:1
09-17 17:42:49.972: I/System.out(2854): SimCountryIso:cn
09-17 17:42:49.972: I/System.out(2854): SimOperator:46002
09-17 17:42:49.972: I/System.out(2854): SimOperatorName:
09-17 17:42:49.977: I/System.out(2854): SimSerialNumber:89860022091387006821
09-17 17:42:49.978: I/System.out(2854): getSimState:5
09-17 17:42:49.978: I/System.out(2854): SubscriberId:460023217433621
09-17 17:42:49.979: I/System.out(2854): VoiceMailNumber:null
其中geNativePhoneNumber的值为空,因为我的手机卡是动感地带的卡,所以无法获取,
这一点可以参考我的上一篇随笔:Android手机号码不是所有的都能获取;
另外我用联通的号码测试了一下,是可以获得号码的。
最后再补充一下以上信息的具体含义:
getNativePhoneNumber获取的手机号
DeviceId(IMEI)手机 国际移动用户识别码
NetworkOperator 移动运营商编号
NetworkOperatorName 移动运营商名称
SimSerialNumber SimOperator SimCountryIso SimSerialNumber SubscriberId(IMSI) 关于手机SIM卡的一些详细信息。
~I{S1~QWUX9KYZX}`U.jpg)
~I{S1~QWUX9KYZX}`U.jpg)
Android获取手机设备识别码(IMEI)和手机号码的更多相关文章
- android 获取手机设备品牌
在有些数据要获取手机设备是什么品牌,特别做一些适配的时候,好了就讲下怎样或者手机是什么品牌: String brand =android.os.Build.BRAND; 就这么简单!
- android -------- 获取手机设备信息
最近在开发中,需要用到一些系统信息,总结了一下 /** * Created by zhangqie on 2019/2/26 * Describe: 系统工具类 */ public class Equ ...
- 【转】android 安卓APP获取手机设备信息和手机号码的代码示例
http://blog.csdn.net/changemyself/article/details/7421476 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓 ...
- android 安卓APP获取手机设备信息和手机号码的代码示例
下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...
- Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)
Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...
- Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息
Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...
- iOS开发-Swift获取手机设备信息(UIDevice)
使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...
- android API版本对应的系统版本及Android获取手机和系统版本等信息的代码
学了这么久的Android,竟然一直对其API对应的名称关系一值搞不清楚,现在网上认真看了下资料,转载一个觉得写得不错的作者的文章,记下来: [背景] 之前折腾android期间,慢慢地知道了,And ...
- Android 获取手机(ios,android)的设备唯一码(mac地址, IMEI)
{ /*获取手机(ios,android)的设备唯一码(mac地址, IMEI)2018年02月16日 ⁄ 综合 ⁄ 共 2697字 ⁄ 字号 小 中 大 ⁄ 评论关闭 app中总会用到客户端下载量数 ...
随机推荐
- android,JNI创建进程,使用fork()
long add(long x,long y) { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) ...
- HTTP Status 500 - An exception occurred processing at line 35
HTTP Status 500 - An exception occurred processing JSP page /manage/addCategory.jsp at line 35 type ...
- Hbase之使用回调函数进行批处理操作
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...
- graph-tool文档(一)- 快速开始使用Graph-tool - 2.属性映射、图的IO和Price网络
目录: 属性映射 -- 内部属性映射 图的I/O 构建一个 Price网络(例) 名词解释: Property maps:属性映射 PropertyMap:一个类 scalar value types ...
- Selenium处理时间控件
Web网页的时间控件往往嵌入到一个iframe里,抓取页面元素时,总是失败? 不要慌,WebDriver已经有相应的处理方法了. driver.switchTo().frame(driver.find ...
- location.pathname;outline:medium;undefined不能加引号
1. location.pathname -- 返回URL的域名后的部分.例如 http://www.dreamdu.com/xhtml/ 返回/xhtml/ 2. 判断某个名称为undefined时 ...
- 绑定事件 addEventListener
addEventListener() 方法用于向指定元素添加事件句柄. addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄. 你可以向一个元素添加多个事件句柄. 你可以向 ...
- 《Java程序设计》实验二 实验报告
实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 1.没有Lin ...
- HTML5自学笔记[ 19 ]canvas绘图实例之炫彩时钟
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Shell基础:变量类型 & 运算符
Shell变量 Shell支持三种类型的变量 用户自定义变量:用户自定义的变量,变量名以英文字母或下划线开头,区分大小写. 位置变量:根据位置传递参数给脚本的变量,默认支持9个位置变量 $1,$2,$ ...