java.lang.Object
↳ android.telephony.TelephonyManager
- 类概述
提供对设备上的电话服务的信息的访问。应用程序可以使用这个类中的方法来确定电话服务和状态,以及访问某些类型的用户信息。应用程序还可以注册一个侦听器接收电话状态更改的通知。
不能直接实例化这个对象,而要通过Context.getSystemService(Context.TELEPHONY_SERVICE)来实例化它。
请注意,访问一些电话信息是权限保护的。您的应用程序无法访问受保护的信息,除非它有在其清单文件中声明的适当权限。在权限适用的情况下,它们会在您访问受保护的信息的方法中被指出。
package com.mystudy.kibi.networktype;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.CellInfo;
import android.telephony.CellLocation;
import android.telephony.TelephonyManager;
import android.util.Log;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
/**
* 在调用getAllCellInfo()方法时需要添加 ACCESS_COARSE_LOCATION 权限
*/
List<CellInfo> cellInfos = telephonyManager.getAllCellInfo();
/**
* 获取电话状态
* 对应返回的常量:
* TelephonyManager.CALL_STATE_IDLE 没有活动
* TelephonyManager.CALL_STATE_OFFHOOK 摘机状态(电话机拿起听筒或按免提,此时的状态就是摘机状态)
* TelephonyManager.CALL_STATE_RINGING 来电状态
*/
telephonyManager.getCallState();
/**
* 获取设备的当前位置。
* 需要添加权限:ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION.
*/
CellLocation cellLocation = telephonyManager.getCellLocation();
/**
* 获取手机号码
* 需要加 READ_PHONE_STATE 权限
*/
String line1Number = telephonyManager.getLine1Number();
Log.e("line1Number",line1Number);
/**
* 获取数据活动状态
* 0: DATA_ACTIVITY_NON 数据连接状态:活动,但无数据发送和接受
* 1: DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据
* 2: DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据
* 3: DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据
* 4: DATA_ACTIVITY_DORMANT 睡眠模式
*/
int dataActivity = telephonyManager.getDataActivity();
Log.e("dataActivity",""+dataActivity); //0
/**
* 获取数据连接状态
* 0: DATA_DISCONNECTED 数据连接状态:断开
* 1: DATA_CONNECTING 数据连接状态:正在连接
* 2: DATA_CONNECTED 数据连接状态:已连接
* 3: DATA_SUSPENDED 数据连接状态:暂停
*/
int dataState = telephonyManager.getDataState();
Log.e("dataState",""+dataState); //0(连接了WIFI)
/**
* 返回当前移动终端的唯一标识
* 如果是GSM网络,返回IMEI;如果是CDMA网络,返回MEID
*/
String deviceId = telephonyManager.getDeviceId();
Log.e("deviceId",deviceId); //868666020520895
/**
* 返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。
*/
String deviceSoftwareVersion = telephonyManager.getDeviceSoftwareVersion();
Log.e("deviceSoftwareVersion",deviceSoftwareVersion); //78
/**
* 返回一个GSM手机的一组标识符.
*/
String groupIdLevel1 = telephonyManager.getGroupIdLevel1();
Log.e("groupIdLevel1",groupIdLevel1); //ffffffff
/**
* 获取短信代理商的URL
*/
String mmsUAProfUrl = telephonyManager.getMmsUAProfUrl();
Log.e("mmsUAProfUrl",mmsUAProfUrl); // http://www.google.com/oha/rdf/ua-profile-kila.xml
/**
* 获取短信代理商
*/
String mmsUserAgent = telephonyManager.getMmsUserAgent();
Log.e("mmsUserAgent",mmsUserAgent); //Android-Mms/0.1
/**
* 获取ISO标准的国家码
*/
String networkCountryIso = telephonyManager.getNetworkCountryIso();
Log.e("networkCountryIso",networkCountryIso); //cn
/**
* MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
*/
String networkOperator = telephonyManager.getNetworkOperator();
Log.e("networkOperator",networkOperator); //46000
/**
* 获取移动网络运营商的名字
*/
String networkOperatorName = telephonyManager.getNetworkOperatorName();
Log.e("networkOperatorName",networkOperatorName); //中国移动
/**
* 获取MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
*/
String simOperator = telephonyManager.getSimOperator();
Log.e("simOperator",simOperator); //46002
/**
* 获取SIM卡运营商的名称
*/
String simOperatorName = telephonyManager.getSimOperatorName();
Log.e("simOperatorName",simOperatorName); //中国移动
/**
* 获取SIM卡运营商的国家代码
*/
String simCountryIso = telephonyManager.getSimCountryIso();
Log.e("simCountryIso",simCountryIso); //cn
/**
* 在可应用的情况下返回SIM卡的序号
*/
String simSerialNumber = telephonyManager.getSimSerialNumber();
Log.e("simSerialNumber",simSerialNumber); //898600000913f9060263
/**
* 返回例如独特的用户ID,一个GSM手机的IMSI。
*/
String subscriberId = telephonyManager.getSubscriberId();
Log.e("subscriberId",subscriberId); //460029019493057
//获取语音信箱的检索字母标识符
String voiceMailAlphaTag = telephonyManager.getVoiceMailAlphaTag();
Log.e("voiceMailAlphaTag",voiceMailAlphaTag); //语音信箱
/**
* 获取语音邮件号码 没有语音邮箱功能 返回为null
*/
// String voiceMailNumber = telephonyManager.getVoiceMailNumber();
// Log.e("voiceMailNumber",voiceMailNumber);
/**
* 获取网络类型
* NETWORK_TYPE_UNKNOWN = 0;
* NETWORK_TYPE_GPRS = 1; 2G
* NETWORK_TYPE_EDGE = 2; 2G
* NETWORK_TYPE_UMTS = 3; 3G
* NETWORK_TYPE_CDMA = 4; 2G
* NETWORK_TYPE_EVDO_0 = 5; 3G
* NETWORK_TYPE_EVDO_A = 6; 3G
* NETWORK_TYPE_1xRTT = 7; 2G
* NETWORK_TYPE_HSDPA = 8; 3G
* NETWORK_TYPE_HSUPA = 9; 3G
* NETWORK_TYPE_HSPA = 10; 3G
* NETWORK_TYPE_IDEN = 11; 2G
* NETWORK_TYPE_EVDO_B = 12; 3G
* NETWORK_TYPE_LTE = 13; 4G
* NETWORK_TYPE_EHRPD = 14; 3G
* NETWORK_TYPE_HSPAP = 15; 3G
* NETWORK_TYPE_GSM = 16; 2G
* NETWORK_TYPE_TD_SCDMA = 17; 3G
* NETWORK_TYPE_IWLAN = 18; 4G
*/
int networkType = telephonyManager.getNetworkType();
Log.e("networkType",""+networkType); //13
/**
* 返回1:单卡
* 返回2:双卡
*/
int phoneCount = telephonyManager.getPhoneCount();
Log.e("phoneCount",""+phoneCount); //2
/**
* 获取电话类型
* 0: PHONE_TYPE_NONE 无类型
* 1: PHONE_TYPE_GSM 全球移动通信系统
* 2: PHONE_TYPE_CDMA 码分多址
* 3: PHONE_TYPE_SIP 跨越因特网的高级电话业务
*/
int phoneType = telephonyManager.getPhoneType();
Log.e("phoneType",""+phoneType); //1
/**
* 获取SIM卡的状态:
* 0: SIM_STATE_UNKNOWN 未知
* 1: SIM_STATE_ABSENT 没有可用的卡
* 2: SIM_STATE_PIN_REQUIRED 锁定:需要用户的卡销解锁
* 3: SIM_STATE_PUK_REQUIRED 锁定:要求用户的SIM卡PUK码解锁
* 4: SIM_STATE_NETWORK_LOCKED 锁定:要求网络销解锁
* 5: SIM_STATE_READY 准备完毕
*/
int simState = telephonyManager.getSimState();
Log.e("simState",""+simState); //5
}
}