Android获取手机设备识别码(IMEI)和手机号码

news/2024/12/5 12:21:47/

最近看了下获取手机设备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("46000")||IMSI.startsWith("46002")){
providerName="中国移动";
}else if(IMSI.startsWith("46001")){
providerName="中国联通";
}else if(IMSI.startsWith("46003")){
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卡的一些详细信息。


http://www.ppmy.cn/news/699094.html

相关文章

2022最新手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)教程

Android篇 1 IMEI和MEID (1) IMEI (International Mobile Equipment Identity) 是国际移动设备身份码的缩写&#xff0c;国际移动装备辨识码&#xff0c;只有Android手机才获取的到&#xff0c;是由15位数字组成的"电子串号"&#xff0c;比如像这样 35988103031435…

获取手机唯一识别码IMEI

前言 获取IMEI相信大家非常熟悉&#xff0c;但是项目中使用时&#xff0c;发现当手机卡为电信的时候&#xff0c;获取的并不是IMEI&#xff0c;而是MEID&#xff0c;什么是MEID&#xff0c;为什么会出现这种情况呢&#xff1f; IMEI国际移动设备识别码&#xff08;IMEI&#xf…

手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)

文章目录 Android篇1 IMEI和MEID2 DeviceId3 mac地址4 ANDROID_ID5 UUID6 OpenUDID7 Serial Number8 IDFA9 GAID iOS篇1 IMEI2 IDFA3 mac地址4 UDID5 UUID6 如何正确的获取设备的唯一标识7 什么是钥匙串 Android篇 1 IMEI和MEID (1) IMEI (International Mobile Equipment Id…

HDLbits--Exams/review2015 fsm

示例&#xff1a; 题目的主要意思是&#xff1a;复位之后寻找1101序列&#xff0c;找到之后shift ena在四个周期内为1&#xff0c;此后输出counting&#xff0c;如果done-counting0&#xff0c;则counting一直为1&#xff0c;直到done-counting1&#xff0c;counting才为0&…

Java并发应用编程之任务执行分析

目录 概述1.任务执行边界划分2.服务器应用程序的想法和实现2.1 串行执行任务2.2 为每个请求创建线程来执行任务 概述 DougLea等人写的《Java并发编程实战》中是这样描述任务的&#xff1a;“在多数的并发应用程序中&#xff0c;都是围绕着“任务执行”来构造的&#xff0c;而任…

OPPO尝鲜android版本更新,安卓11迎来四大贴心升级,OPPO小米率先尝鲜

9月9日&#xff0c;谷歌正式发布了Android 11系统&#xff0c;国产手机厂商迅速做出反应&#xff0c;其中&#xff0c;小米和OPPO立即开启了升级推送通知&#xff0c;用户收到后就可以直接下载安装使用&#xff0c;这样的速度可以说是秒推送了。虽然Android 11系统此次升级并没…

OPPOa11android登录网络,OPPO新机入网运行Android 11系统

文章来源&#xff1a;科技讯 本月初OPPO两款机型通过了工信部入网审核包括SparrowNews和GSMArena在内的多家外媒和国内媒体将其称为OPPO Reno5系列 OPPO 新机正面采用了一块 6.43 英寸的 FHD 分辨率的 AMOLED 屏幕搭载了一颗主频为 2.4GHz 的 8 核处理器网友猜测可能是天玑 80…

el-select修改样式

目录 准备 修改placeholder颜色 修改右侧箭头 修改圆角边框 准备 <el-select v-model"goodsId" clearable placeholder"请选择" :popper-append-to-body"false"><el-option v-for"item in kindList" :key"item.value…