最近看了下获取手机设备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卡的一些详细信息。

Android获取手机设备识别码(IMEI)和手机号码的更多相关文章

  1. android 获取手机设备品牌

    在有些数据要获取手机设备是什么品牌,特别做一些适配的时候,好了就讲下怎样或者手机是什么品牌: String brand =android.os.Build.BRAND; 就这么简单!

  2. android -------- 获取手机设备信息

    最近在开发中,需要用到一些系统信息,总结了一下 /** * Created by zhangqie on 2019/2/26 * Describe: 系统工具类 */ public class Equ ...

  3. 【转】android 安卓APP获取手机设备信息和手机号码的代码示例

    http://blog.csdn.net/changemyself/article/details/7421476 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓 ...

  4. android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  5. Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)

    Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...

  6. Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息

    Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...

  7. iOS开发-Swift获取手机设备信息(UIDevice)

    使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...

  8. android API版本对应的系统版本及Android获取手机和系统版本等信息的代码

    学了这么久的Android,竟然一直对其API对应的名称关系一值搞不清楚,现在网上认真看了下资料,转载一个觉得写得不错的作者的文章,记下来: [背景] 之前折腾android期间,慢慢地知道了,And ...

  9. Android 获取手机(ios,android)的设备唯一码(mac地址, IMEI)

    { /*获取手机(ios,android)的设备唯一码(mac地址, IMEI)2018年02月16日 ⁄ 综合 ⁄ 共 2697字 ⁄ 字号 小 中 大 ⁄ 评论关闭 app中总会用到客户端下载量数 ...

随机推荐

  1. phalcon: crypt-encrypt/decrypt用法

    phalcon:crypt加密与解密 可以在入口文件index.php进行配置,也可以不配置: $di->set('crypt', function(){ $crypt = new \Phalc ...

  2. win7下载

    正式版WIN7的64位旗舰版 http://pan.baidu.com/share/link?shareid=60038&uk=3960800092 下面是正式win8Windows 8 64 ...

  3. 安卓App热补丁动态修复技术介绍

    版权声明:本文由johncz原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/169 来源:腾云阁 https://www.q ...

  4. 接口(C# 参考)

    接口只包含方法.属性.事件或索引器的签名. 实现接口的类或结构必须实现接口定义中指定的接口成员. 在下面的示例,类 ImplementationClass必须实现一个不具有参数并返回 void 的名为 ...

  5. 20145236 《Java程序设计》 第6周学习总结

    20145236 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 InputStream与OutputStream 串流设计的概念 Java将输入/输出抽象化为串 ...

  6. 初始maven

    Apache Maven 是一个软件项目管理和综合工具.基于项目对象模型 (POM) 的概念,Maven 可以管理一个项目的生成. 报告和文档从一块中央的信息.在JavaEE中,我们可以使用Maven ...

  7. 3.7 嵌入式SQL

    可以放入所有高级语言中去,如C 因为,SQL是过程性语句,需要高级语言的非过程性处理集合的分类处理 一.一般形式 所有的SQL语句都必须加前缀EXEC SQL SQL语句完成结束标志(:或END EX ...

  8. lucene底层数据结构——底层filter bitset原理,时间序列数据压缩将同一时间数据压缩为一行

    如何联合索引查询? 所以给定查询过滤条件 age=18 的过程就是先从term index找到18在term dictionary的大概位置,然后再从term dictionary里精确地找到18这个 ...

  9. 377. Combination Sum IV——DP本质:针对结果的迭代,dp[ans] <= dp[ans-i] & dp[i] 找三者关系 思考问题的维度+1,除了数据集迭代还有考虑结果

    Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...

  10. C#学习笔记思维导图 一本书22张图

    阅读的书是<21天学通C#>博客中有下载 看看总结之后的模块 全部文件 初步展示 数据存储 继承模块 暂时就这些吧 全部思维导图22张打包下载