最近看了下获取手机设备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. Java内部接口的调用方式

    package com.hs.review; public class Person { public static void main(String[] args) { Person p1 = ne ...

  2. 在应用中更新App版本

    在应用中, 为了提高用户体验, 会提供更新版本的功能. 那么如何实现呢? 我写了一个简单的Demo, 说明一下, 需要注意几个细节. 使用了Retrofit和Rx处理网络请求. Github下载地址 ...

  3. vitamio 缓冲一部分时,loading还没消失,直接点击播放,loading未能消失

    在videoView的start()中 添加loading消失语句,效果很好 ,也没有出现任何问题

  4. 关于ipxe启动的几个疑问

    关于ipxe启动的几个疑问 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=373026&page=1&extra=#pid ...

  5. 抽象类中的抽象方法也是默认public的么(类似于interface)?

    测试下: public abstract class AbstractTest { abstract int printline(); } 在另一个package 设置 public class Ab ...

  6. ios app 支持 ipv6-only

    最近苹果公司发布声明:自今年6月1日开始,所有提交至苹果App Store的应用申请必须要兼容面向硬件识别和网络路由的最新互联网协议--IPv6-only标准. 那么问题来了,目前的app是否支持ip ...

  7. js的with语句使用方法

    1)简要说明         with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性.要给对象创建新的属性,必须明确地引用该对象. 2)语法格式  with(object ...

  8. 101个MySQL 的调节和优化的提示

    MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...

  9. 使用自定义模板为Myeclipse添加新建Filter的功能

    第一步:单击windowpreference菜单项,在打开的窗口中,依次展开Java.Editor.Templates列表项,然后在打开的Templates面板中,单击[New]按钮 使用这个模板非 ...

  10. stackview

    Stack View会被当成Container View.所以它是一个不会被渲染的UIView子类.它不像其他UIView子类一样,会被渲染到屏幕上.这也意味着设置其backgroundColor属性 ...