Android开发使用TelephonyManager获得手机相关信息

在Android的开发过程中,有时候我们会需要获得手机的相关信息,下面就简单的介绍一下使用TelephonyManager来获得手机信息的方法。

代码如下:

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.CellLocation;
import android.telephony.TelephonyManager;
import android.widget.TextView;

public class TelephonyManagerActivity extends Activity {

private TextView tv_01, tv_02, tv_03, tv_04, tv_05, tv_06, tv_07, tv_08, tv_09, tv_10, tv_11, tv_12, tv_13, tv_14,
tv_15, tv_16, tv_17, tv_18, tv_19, tv_20;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
// 获得TelephonyManager对象
TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/**
* 返回电话状态

* CALL_STATE_IDLE 无任何状态时 CALL_STATE_OFFHOOK 接起电话时 CALL_STATE_RINGING
* 电话进来时
*/
int callState = manager.getCallState();
switch (callState) {
case TelephonyManager.CALL_STATE_IDLE:
showTextView(tv_01, "callState=无任何状态");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
showTextView(tv_01, "callState=接起电话状态");
break;
case TelephonyManager.CALL_STATE_RINGING:
showTextView(tv_01, "callState=电话进来状态");
break;
default:
break;
}

/**
* 返回当前移动终端的位置
*/
CellLocation cellLocation = manager.getCellLocation();
showTextView(tv_02, "cellLocation=" + cellLocation.toString());

/**
* 请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,
* 需要的permission名称为ACCESS_COARSE_LOCATION。
*/
CellLocation.requestLocationUpdate();

/**
* 获取数据连接状态 DATA_CONNECTED 数据连接状态:已连接; DATA_CONNECTING 数据连接状态:正在连接;
* DATA_DISCONNECTED 数据连接状态:断开; DATA_SUSPENDED 数据连接状态:暂停;
*/
int dataState = manager.getDataState();
switch (dataState) {
case TelephonyManager.DATA_CONNECTED:// 数据连接状态:已连接
showTextView(tv_03, "dataState=数据连接状态:已连接");
break;
case TelephonyManager.DATA_CONNECTING:// 数据连接状态:正在连接
showTextView(tv_03, "dataState=数据连接状态:正在连接");
break;
case TelephonyManager.DATA_DISCONNECTED:// 数据连接状态:断开
showTextView(tv_03, "dataState=数据连接状态:断开");
break;
case TelephonyManager.DATA_SUSPENDED:// 数据连接状态:暂停
showTextView(tv_03, "dataState=数据连接状态:暂停");
break;
default:
break;
}

/**
* 获取数据活动状态

* DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据 ;DATA_ACTIVITY_OUT
* 数据连接状态:活动,正在发送数据; DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据
* ;DATA_ACTIVITY_NONE 数据连接状态:活动,但无数据发送和接受;
*/
int dataActivity = manager.getDataActivity();
switch (dataActivity) {
case TelephonyManager.DATA_ACTIVITY_IN:// 数据连接状态:活动,正在接受数据
showTextView(tv_04, "dataActivity=数据连接状态:活动,正在接受数据");
break;
case TelephonyManager.DATA_ACTIVITY_OUT:// 数据连接状态:活动,正在发送数据
showTextView(tv_04, "dataActivity=数据连接状态:活动,正在发送数据");
break;
case TelephonyManager.DATA_ACTIVITY_INOUT:// 数据连接状态:活动,正在接受和发送数据
showTextView(tv_04, "dataActivity=数据连接状态:活动,正在接受和发送数据");
break;
case TelephonyManager.DATA_ACTIVITY_NONE:// 数据连接状态:活动,但无数据发送和接受
showTextView(tv_04, "dataActivity=数据连接状态:活动,但无数据发送和接受");
break;
default:
break;
}

/**
* 返回当前移动终端的唯一标识

*/
String deviceId = manager.getDeviceId();
showTextView(tv_05, "deviceId=" + deviceId.toString());

/**
* 返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。
*/
String deviceSoftwareVersion = manager.getDeviceSoftwareVersion();
showTextView(tv_06, "deviceSoftwareVersion=" + deviceSoftwareVersion);

/**
* 返回手机号码,
*/
String line1Number = manager.getLine1Number();
showTextView(tv_07, "line1Number=" + line1Number);

/**
* 返回ISO标准的国家码,即国际长途区号
*/
String networkCountryIso = manager.getNetworkCountryIso();
showTextView(tv_08, "networkCountryIso=" + networkCountryIso);

/**
* 返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
*/
String networkOperator = manager.getNetworkOperator();
showTextView(tv_09, "networkOperator=" + networkOperator);

/**
* 返回移动网络运营商的名字(SPN)
*/
String networkOperatorName = manager.getNetworkOperatorName();
showTextView(tv_10, "networkOperatorName=" + networkOperatorName);

/**
* 获取网络类型

* NETWORK_TYPE_CDMA 网络类型为CDMA ;NETWORK_TYPE_EDGE 网络类型为EDGE;
* NETWORK_TYPE_EVDO_0 网络类型为EVDO0; NETWORK_TYPE_EVDO_A 网络类型为EVDOA;
* NETWORK_TYPE_GPRS 网络类型为GPRS; NETWORK_TYPE_HSDPA 网络类型为HSDPA;
* NETWORK_TYPE_HSPA 网络类型为HSPA ;NETWORK_TYPE_HSUPA 网络类型为HSUPA;
* NETWORK_TYPE_UMTS 网络类型为UMTS;

* 在中国,联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO
*/
int networkType = manager.getNetworkType();
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_CDMA:
showTextView(tv_11, "networkType=网络类型为CDMA");
break;
case TelephonyManager.NETWORK_TYPE_EDGE:
showTextView(tv_11, "networkType=网络类型为EDGE");
break;
case TelephonyManager.NETWORK_TYPE_EVDO_0:
showTextView(tv_11, "networkType=网络类型为EVDO0");
break;
case TelephonyManager.NETWORK_TYPE_EVDO_A:
showTextView(tv_11, "networkType=网络类型为EVDOA");
break;
case TelephonyManager.NETWORK_TYPE_GPRS:
showTextView(tv_11, "networkType=网络类型为GPRS");
break;
case TelephonyManager.NETWORK_TYPE_HSDPA:
showTextView(tv_11, "networkType=网络类型为HSDPA");
break;
case TelephonyManager.NETWORK_TYPE_HSPA:
showTextView(tv_11, "networkType=网络类型为HSPA");
break;
case TelephonyManager.NETWORK_TYPE_HSUPA:
showTextView(tv_11, "networkType=网络类型为HSUPA");
break;
case TelephonyManager.NETWORK_TYPE_UMTS:
showTextView(tv_11, "networkType=网络类型为UMTS");
break;
default:
showTextView(tv_11, "networkType=未知");
break;
}

/**
* 返回移动终端的类型

* PHONE_TYPE_CDMA 手机制式为CDMA,电信 PHONE_TYPE_GSM 手机制式为GSM,移动和联通
* PHONE_TYPE_NONE 手机制式未知
*/
int phoneType = manager.getPhoneType();
switch (phoneType) {
case TelephonyManager.PHONE_TYPE_CDMA:
showTextView(tv_12, "phoneType=CDMA,电信");
break;
case TelephonyManager.PHONE_TYPE_GSM:
showTextView(tv_12, "phoneType=GSM,移动和联通");
break;
case TelephonyManager.PHONE_TYPE_NONE:
showTextView(tv_12, "phoneType=未知");
break;
default:
break;
}

/**
* 返回SIM卡提供商的国家代码
*/
String simCountryIso = manager.getSimCountryIso();
showTextView(tv_13, "simCountryIso=" + simCountryIso);

/**
* 返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
*/
String simOperator = manager.getSimOperator();
String simOperatorName = manager.getSimOperatorName();
showTextView(tv_14, "simOperator=" + simOperator + simOperatorName);

/**
* 返回SIM卡的序列号(IMEI)
*/
String simSerialNumber = manager.getSimSerialNumber();
showTextView(tv_15, "simSerialNumber=" + simSerialNumber);

/**
* 返回移动终端

* SIM_STATE_ABSENT SIM卡未找到 ;SIM_STATE_NETWORK_LOCKED
* SIM卡网络被锁定,需要Network PIN解锁 ;SIM_STATE_PIN_REQUIRED SIM卡PIN被锁定,需要User
* PIN解锁; SIM_STATE_PUK_REQUIRED SIM卡PUK被锁定,需要User PUK解锁
* ;SIM_STATE_READY SIM卡可用; SIM_STATE_UNKNOWN SIM卡未知
*/
int simState = manager.getSimState();
switch (simState) {
case TelephonyManager.SIM_STATE_ABSENT:
showTextView(tv_16, "simState=SIM卡未找到");
break;
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
showTextView(tv_16, "simState=SIM卡网络被锁定");
break;
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
showTextView(tv_16, "simState=SIM卡PIN被锁定");
break;
case TelephonyManager.SIM_STATE_PUK_REQUIRED:
showTextView(tv_16, "simState=SIM卡PUK被锁定");
break;
case TelephonyManager.SIM_STATE_READY:
showTextView(tv_16, "simState=SIM卡可用");
break;
case TelephonyManager.SIM_STATE_UNKNOWN:
showTextView(tv_16, "simState=SIM卡未知");
break;
default:
break;
}

/**
* 返回用户唯一标识,比如GSM网络的IMSI编号
*/
String subscriberId = manager.getSubscriberId();
showTextView(tv_17, "subscriberId=" + subscriberId);

/**
* 获取语音信箱号码关联的字母标识。
*/
String voiceMailAlphaTag = manager.getVoiceMailAlphaTag();
showTextView(tv_18, "voiceMailAlphaTag=" + voiceMailAlphaTag);

/**
* 返回语音邮件号码
*/
String voiceMailNumber = manager.getVoiceMailNumber();
boolean hasIccCard = manager.hasIccCard();
showTextView(tv_19, "voiceMailNumber=" + voiceMailNumber);
/**
* 返回手机是否处于漫游状态
*/
boolean networkRoaming = manager.isNetworkRoaming();
if (networkRoaming) {
showTextView(tv_20, "networkRoaming=漫游中...");
} else {
showTextView(tv_20, "networkRoaming=非漫游中...");
}
}

private void initView() {
tv_01 = (TextView) findViewById(R.id.tv_01);
tv_02 = (TextView) findViewById(R.id.tv_02);
tv_03 = (TextView) findViewById(R.id.tv_03);
tv_04 = (TextView) findViewById(R.id.tv_04);
tv_05 = (TextView) findViewById(R.id.tv_05);
tv_06 = (TextView) findViewById(R.id.tv_06);
tv_07 = (TextView) findViewById(R.id.tv_07);
tv_08 = (TextView) findViewById(R.id.tv_08);
tv_09 = (TextView) findViewById(R.id.tv_09);
tv_10 = (TextView) findViewById(R.id.tv_10);
tv_11 = (TextView) findViewById(R.id.tv_11);
tv_12 = (TextView) findViewById(R.id.tv_12);
tv_13 = (TextView) findViewById(R.id.tv_13);
tv_14 = (TextView) findViewById(R.id.tv_14);
tv_15 = (TextView) findViewById(R.id.tv_15);
tv_16 = (TextView) findViewById(R.id.tv_16);
tv_17 = (TextView) findViewById(R.id.tv_17);
tv_18 = (TextView) findViewById(R.id.tv_18);
tv_19 = (TextView) findViewById(R.id.tv_19);
tv_20 = (TextView) findViewById(R.id.tv_20);
}

private void showTextView(TextView textView, String content) {
textView.setText(content);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值