Android开发之获取手机SIM卡信息
TelephonyManager是一个管理手机通话状态、电话网络信息的服务类。该类提供了大量的getXxx(),方法获取电话网络的相关信息。
TelephonyManager类概述:
可用于訪问有关设备上的电话服务信息。
应用程序能够使用这个类的方法来确定电话服务和状态,以及訪问某些类型的用户信息。应用程序还能够注冊一个侦听器以接收的电话状态变化通知。
你不能直接实例化这个类;相反,你能够通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法还获取初始化TelephonyManager实例。
须要注意的是訪问某些电话信息permission-protected。。你的应用程序应该获得訪问手机位置和状态的的一些权限。
TelephonyManager类提供的基本的方法:
|
Public Methods |
|
|
int |
getCallState() 返回一个常数,表示设备上的呼叫状态 |
|
CellLocation |
getCellLocation() 返回设备的当前位置。 |
|
int |
getDataActivity() 返回一个常数,表示活动的数据连接的类型。 |
|
int |
getDataState() 返回一个常数表示当前数据连接状态 |
|
String |
getDeviceId() 返回唯一的设备ID,比如,IMEI GSM和MEID |
|
String |
getDeviceSoftwareVersion() 返回设备的软件版本,比如,的IMEI |
|
String |
getLine1Number() 返回1号线的电话号码,比如。MSISDN用于GSM电话。 |
|
List<NeighboringCellInfo> |
getNeighboringCellInfo() 返回设备的相邻小区信息。 |
|
String |
getNetworkCountryIso() 返回注冊的网络运营商的国家代码 |
|
String |
getNetworkOperator() 返回的MCC +跨国公司的注冊网络运营商 |
|
String |
getNetworkOperatorName() 返回注冊的网络运营商的名字 |
|
int |
getNetworkType() 返回一个常数,表示眼下在设备上使用的无线电技术(网络类型)。 |
|
int |
getPhoneType() 返回设备的类型(手机制式)。 |
|
String |
getSimCountryIso() 返回SIM卡运营商的国家代码 |
|
String |
getSimOperator() 返回MCC +跨国公司(移动国家代码+移动网络代码)的提供者的SIM卡。 |
|
String |
getSimOperatorName() 返回服务提供者的名称(SPN)。 |
|
String |
getSimSerialNumber() 返回SIM卡的序列号,假设适用的话。 |
|
int |
getSimState() 返回一个常数表示SIM卡设备的状态。 |
|
String |
getSubscriberId() 返回唯一的用户ID,比如,IMSI为GSM手机。 |
|
String |
getVoiceMailAlphaTag() 检索与语音信箱号码相关的字母标识符。 |
|
String |
getVoiceMailNumber() 返回语音信箱号码。 |
|
boolean |
hasIccCard() |
|
boolean |
isNetworkRoaming() 返回true,假设该设备被觉得是漫游当前网络上,支持GSM目的。 |
|
void |
listen(PhoneStateListener listener, int events) 注冊一个侦听器对象接收改变指定的电话状态的通知。 |
应用实例:
执行效果图:
TelephonyStatus类:
package com.jph.telephonystatus; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.telephony.TelephonyManager;
import android.widget.ListView;
import android.widget.SimpleAdapter;
/**
* Describe:</br>
* 获取Sim卡信息
* 本实例通过TelephonyManager类的对象的getXxx()
* 方法获取手机Sim卡信息。
* @author jph
* Date:2014.07.22
* */
public class TelephonyStatus extends Activity {
ListView listShow;
//创建一个tManager类的实例
TelephonyManager tManager;
//声明一个表示Sim卡状态名的数组
String []statusName=new String[]{};
//声明一个表示Sim卡状态值得集合
ArrayList<String>statusValue=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listShow=(ListView)findViewById(R.id.listShow);
//获取系统的tManager对象
tManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
//获取表示各种状态名的数组
statusName=getResources().getStringArray(R.array.statusName);
//获取表示sim卡状态的的数组
String simStatus[]=getResources().getStringArray(R.array.simStatus);
//获取表示手机类型的数组
String phoneType[]=getResources().getStringArray(R.array.phoneType);
//获取设备编号
statusValue.add(tManager.getDeviceId());
//获取设备类型
statusValue.add(phoneType[tManager.getPhoneType()]);
//获取软件版本号
statusValue.add(tManager.getDeviceSoftwareVersion()==null?"未知"
:tManager.getDeviceSoftwareVersion());
//获取设备当前位置
statusValue.add(tManager.getCellLocation()==null? "未知"
:tManager.getCellLocation().toString());
//获取设备呼叫状态
switch (tManager.getCallState()) {
case TelephonyManager.CALL_STATE_IDLE:
statusValue.add("空暇");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
statusValue.add("正在通话");
break;
case TelephonyManager.CALL_STATE_RINGING:
statusValue.add("等待接听");
break;
default:
break;
}
//获取电话号码
statusValue.add(tManager.getLine1Number());
//获取运营商的国家代码
statusValue.add(tManager.getNetworkCountryIso());
//获取运营商的名称
statusValue.add(tManager.getNetworkOperatorName());
//获取网络类型
statusValue.add(getNetworkType(tManager.getNetworkType()));
//获取SPN
statusValue.add(tManager.getSimOperatorName().equals("")?"未知"
:tManager.getSimOperatorName());
//获取SIM卡的序列号
statusValue.add(tManager.getSimSerialNumber());
//获取SIM卡状态
statusValue.add(simStatus[tManager.getSimState()]);
List<Map<String, Object>> listItems=new ArrayList<Map<String,Object>>();
// 遍历statusValues集合。将statusNames、statusValues
// 的数据封装到List<Map<String , String>>集合中
for (int i = 0; i < statusName.length; i++) {
Map<String, Object>listItem=new HashMap<String, Object>();
listItem.put("name",statusName[i]);
listItem.put("value",statusValue.get(i));
listItems.add(listItem);
}
SimpleAdapter adapter=new SimpleAdapter(this, listItems, R.layout.line,
new String[]{"name","value"},new int[]{R.id.txtName,R.id.txtValue});
//为listShow设置Adapter
listShow.setAdapter(adapter);
}
//获取手机网络类型
private String getNetworkType(int networkType) {
// TODO Auto-generated method stub
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_1xRTT:
return "1xRTT";
case TelephonyManager.NETWORK_TYPE_CDMA:
return "CDMA";
case TelephonyManager.NETWORK_TYPE_EDGE:
return "EDGE";
case TelephonyManager.NETWORK_TYPE_EHRPD:
return "EHRPD";
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return "EVDO_0";
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return "EVDO_A";
case TelephonyManager.NETWORK_TYPE_EVDO_B:
return "EVDO_B";
case TelephonyManager.NETWORK_TYPE_GPRS:
return "GPRS";
case TelephonyManager.NETWORK_TYPE_HSDPA:
return "HSDPA";
case TelephonyManager.NETWORK_TYPE_HSPA:
return "HSPA";
case TelephonyManager.NETWORK_TYPE_HSPAP:
return "HSPAP";
case TelephonyManager.NETWORK_TYPE_HSUPA:
return "HSUPA";
case TelephonyManager.NETWORK_TYPE_IDEN:
return "IDEN";
case TelephonyManager.NETWORK_TYPE_LTE:
return "LTE";
case TelephonyManager.NETWORK_TYPE_UMTS:
return "UMTS";
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
return "UNKNOWN";
default:
return "UNKNOWN";
}
}
}
array.xml
<? xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 声明一个名为statusName的数组 -->
<string-array name="statusName">
<item>设备编号</item>
<item>手机制式</item>
<item>软件版本号</item>
<item>设备当前位置</item>
<item>设备呼叫状态</item>
<item>电话号码</item>
<item>运营商的国家代码</item>
<item>运营商的名称</item>
<item>网络类型</item>
<item>SPN</item>
<item>SIM卡的序列号</item>
<item>SIM卡状态</item>
</string-array>
<!-- 声明一个名为phoneType的数组 -->
<string-array name="phoneType">
<item>未知</item>
<item>GSM</item>
<item>CDMA</item>
</string-array>
<!-- 声明一个名为simSatus的数组 -->
<string-array name="simStatus">
<item>状态未知</item>
<item>无SIM卡</item>
<item>被PIN加锁</item>
<item>被PUK加锁</item>
<item>被NetWork PIN加锁</item>
<item>已准备好</item>
</string-array>
</resources>
AndroidManifest.xml
<!-- 加入訪问手机位置的权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 加入訪问手机状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
关于TelephonyManager其他实际应用可參照:Android开发之监听手机来电
Android开发之获取手机SIM卡信息的更多相关文章
- 017 Android 获取手机SIM卡序列号和读取联系人
1.获取手机SIM卡序列号 //5.存储sim卡系列号 //5.1获取sim卡系列号 TelephonyManager manager = (TelephonyManager) getSystemSe ...
- Windows mobile 下读取手机SIM卡信息(转)
Windows mobile 下读取手机SIM卡信息 c#改善 Windows mobile 下读取手机SIM卡信息
- Android 获取手机SIM卡运营商
直接上代码: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context con ...
- 【工具类】获取手机sim卡的运营商
加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...
- Android初级教程获取手机系统联系人信息
在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...
- Android开发之获取设备的屏幕信息和px dp之间的转换
DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metr ...
- Android开发之获取系统所有进程信息。
最近在做一个app,有一个进程管理模块用于管理系统中正在运行的进程,并且可以关闭进程进行加速手机的功能,基本把它实现了出来.界面的效果都是自己写的,虽然有BUG,但是基本上能满足需求,后期我会改进BU ...
- Android菜鸟的成长笔记(23)——获取网络和SIM卡信息
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx()方法来获取电话网络的相关信息.这些信息包括设备编号.软件版本.网络运营商代号.网络运营商名 ...
- ios开发获取SIM卡信息
.加入一个Framework(CoreTelephony.framework). .引入头文件 #import<CoreTelephony/CoreTelephonyDefines.h> ...
随机推荐
- Xcode dSYM 文件
1.什么是 dSYM 文件 Xcode 编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且 ...
- SQL如何获得本季度第一天、一年的第一天、本月的最后一天
nterval 参数,具有以下设定值: 设置 描述 Year yy, yyyy 年 quarter qq, q 季 Month mm, m 月 dayofyear dy, y 一年的日数 Day dd ...
- Struts2之数据标签(二)
Struts2之数据标签(一):http://blog.csdn.net/u012561176/article/details/46848817 1.action标签:使用此标签能够同意在JSP页面中 ...
- SharePoint CAML In Action——Part II
在SharePoint中,相对于Linq to SharePoint而言,CAML是轻量化的.当然缺点也是显而易见的,"Hard Code"有时会让你抓狂.在实际场景中,经常会根据 ...
- python opencv 按一定间隔截取视频帧
前言关于opencvOpenCV 是 Intel 开源计算机视觉库 (Computer Version) .它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. ...
- mysql 8.0 java连接报错:Unknown system variable 'query_cache_size'
java连接mysql 8.0.11报错 java.sql.SQLException: Unknown system variable 'query_cache_size' at com.mysql. ...
- go环境变量配置 (GOROOT和GOPATH)
GOROOT就是go的安装路径在~/.bash_profile中添加下面语句: GOROOT=/usr/local/go export GOROOT 当然, 要执行go命令和go工具, 就要配置go的 ...
- Another app is currently holding the yum lock; waiting for it to exit.. yum被锁定无法使用
yum被锁定无法使用 Another app is currently holding the yum lock; waiting for it to exit.. 解决方法: rm -rf /var ...
- Android app 全局异常统一处理
异常处理需求 Android app 出现 crash 时,会出现 "程序异常退出" 的提示并关闭,体验不好,另外主要是无法知道哪里出现的崩溃,需要知道哪里造成的异常,就需要一个全 ...
- Atitti html5 h5 新特性attilax总结
Atitti html5 h5 新特性attilax总结 Attilax觉得不错的新特性 3.语义Header和Footer (The Semantic Header and Footer) 8.占位 ...