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
CDMA手机。

String

getDeviceSoftwareVersion()

返回设备的软件版本,比如,的IMEI
/ SV GSM手机。

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卡信息的更多相关文章

  1. 017 Android 获取手机SIM卡序列号和读取联系人

    1.获取手机SIM卡序列号 //5.存储sim卡系列号 //5.1获取sim卡系列号 TelephonyManager manager = (TelephonyManager) getSystemSe ...

  2. Windows mobile 下读取手机SIM卡信息(转)

    Windows mobile 下读取手机SIM卡信息 c#改善 Windows mobile 下读取手机SIM卡信息

  3. Android 获取手机SIM卡运营商

    直接上代码: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context con ...

  4. 【工具类】获取手机sim卡的运营商

    加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...

  5. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...

  6. Android开发之获取设备的屏幕信息和px dp之间的转换

    DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metr ...

  7. Android开发之获取系统所有进程信息。

    最近在做一个app,有一个进程管理模块用于管理系统中正在运行的进程,并且可以关闭进程进行加速手机的功能,基本把它实现了出来.界面的效果都是自己写的,虽然有BUG,但是基本上能满足需求,后期我会改进BU ...

  8. Android菜鸟的成长笔记(23)——获取网络和SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx()方法来获取电话网络的相关信息.这些信息包括设备编号.软件版本.网络运营商代号.网络运营商名 ...

  9. ios开发获取SIM卡信息

    .加入一个Framework(CoreTelephony.framework). .引入头文件 #import<CoreTelephony/CoreTelephonyDefines.h> ...

随机推荐

  1. android控件拖动,移动、解决父布局重绘时控件回到原点

    这是主要代码: 保证其params发生改变,相对于父布局的位置就能达到位置移动到原来的位置 // 每次移动都要设置其layout,不然由于父布局可能嵌套listview,当父布局发生改变冲毁(如下拉刷 ...

  2. FreeSWITCH收到重复的DTMF信号

    一.背景 用户是运营商手机,拨打的是运营商的固话号码进入的FreeSWITCH的IVR,进入IVR语音播报后,按指定的分机号呼相关人员. 二.现象 用户反映拨打124870找不到指定人员,以前是正常的 ...

  3. C++ error: passing 'const std::map<>]' discards qualifiers或pass-by-reference-to-const-map导致的“discards qualifiers”

    产生问题的场景: int func(const map<int, string> &aMap) { string value = amap[0]; } 或者 int  Test:: ...

  4. 常用代码之八:setTimeout 和 clearTimeout。

    1.先写一个错误的例子:   function DealSomething() {        //write some code        window.setTimeout(function ...

  5. golang包time用法详解

    在我们编程过程中,经常会用到与时间相关的各种务需求,下面来介绍 golang 中有关时间的一些基本用法,我们从 time 的几种 type 来开始介绍. 时间可分为时间点与时间段,golang 也不例 ...

  6. jmeter 签名MD5生成

    请求接口需要同时发送签名,签名定义为: 可以看出签名就是把用户的密码 .用户名 和签名key生成一个md5串就可以了 刚好jmeter 有个md5 生成,生成前需要获取name ,password k ...

  7. jQuery的dialog弹窗实现

    jQuery实现dialog弹窗: html代码如下: <input type="button" onclick="performances();" va ...

  8. centOS7 安装man中文手册

    [root@localhost ~]# yum list | grep man.*zh -.el7 base [root@localhost ~]# yum -y install man-pages- ...

  9. [Golang] 从零开始写Socket Server(1): Socket-Client框架

    版权声明:本文为博主原创文章,未经博主允许不得转载. 第一次跑到互联网公司实习 ..感觉自己进步飞快啊~第一周刚写了个HTTP服务器用于微信公共号的点餐系统~ 第二周就直接开始一边自学Go语言一边写用 ...

  10. MySql(十八):MySql架构设计——高可用设计之 MySQL 监控

    前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...