TelephonyManager解析

TelephonyManager类提供了访问设备电话服务信息的接口。应用可以通过它获取电话状态、用户信息,并注册监听器接收电话状态变化通知。需通过Context.getSystemService(Context.TELEPHONY_SERVICE)获取实例,部分功能需要特定权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值