Android中TelephonyManager类的方法实例分析

本文实例讲述了Android中TelephonyManager类的方法。分享给大家供大家参考。具体如下:

TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。

TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯信息的获取对应用程序的权限有一定的限制,在开发的时候需要为其添加相应的权限。

以下列出TelephonyManager类所有方法及说明:

package com.ljq.activity;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.CellLocation;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
public class TelephonyManagerActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    /**
     * 返回电话状态
     *
     * CALL_STATE_IDLE 无任何状态时
     * CALL_STATE_OFFHOOK 接起电话时
     * CALL_STATE_RINGING 电话进来时
     */
    tm.getCallState();
    //返回当前移动终端的位置
    CellLocation location=tm.getCellLocation();
    //请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为ACCESS_COARSE_LOCATION。
    location.requestLocationUpdate();
    /**
     * 获取数据活动状态
     *
     * DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据
     * DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据
     * DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据
     * DATA_ACTIVITY_NONE 数据连接状态:活动,但无数据发送和接受
     */
    tm.getDataActivity();
    /**
     * 获取数据连接状态
     *
     * DATA_CONNECTED 数据连接状态:已连接
     * DATA_CONNECTING 数据连接状态:正在连接
     * DATA_DISCONNECTED 数据连接状态:断开
     * DATA_SUSPENDED 数据连接状态:暂停
     */
    tm.getDataState();
    /**
     * 返回当前移动终端的唯一标识
     *
     * 如果是GSM网络,返回IMEI;如果是CDMA网络,返回MEID
     */
    tm.getDeviceId();
    //返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。
    tm.getDeviceSoftwareVersion();
    //返回手机号码,对于GSM网络来说即MSISDN
    tm.getLine1Number();
    //返回当前移动终端附近移动终端的信息
    List<NeighboringCellInfo> infos=tm.getNeighboringCellInfo();
    for(NeighboringCellInfo info:infos){
      //获取邻居小区号
      int cid=info.getCid();
      //获取邻居小区LAC,LAC: 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。
      info.getLac();
      info.getNetworkType();
      info.getPsc();
      //获取邻居小区信号强度
      info.getRssi();
    }
    //返回ISO标准的国家码,即国际长途区号
    tm.getNetworkCountryIso();
    //返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
    tm.getNetworkOperator();
    //返回移动网络运营商的名字(SPN)
    tm.getNetworkOperatorName();
    /**
     * 获取网络类型
     *
     * 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
     */
    tm.getNetworkType();
    /**
     * 返回移动终端的类型
     *
     * PHONE_TYPE_CDMA 手机制式为CDMA,电信
     * PHONE_TYPE_GSM 手机制式为GSM,移动和联通
     * PHONE_TYPE_NONE 手机制式未知
     */
    tm.getPhoneType();
    //返回SIM卡提供商的国家代码
    tm.getSimCountryIso();
    //返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
    tm.getSimOperator();
    tm.getSimOperatorName();
    //返回SIM卡的序列号(IMEI)
    tm.getSimSerialNumber();
    /**
     * 返回移动终端
     *
     * 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卡未知
     */
    tm.getSimState();
    //返回用户唯一标识,比如GSM网络的IMSI编号
    tm.getSubscriberId();
    //获取语音信箱号码关联的字母标识。
    tm.getVoiceMailAlphaTag();
    //返回语音邮件号码
    tm.getVoiceMailNumber();
    tm.hasIccCard();
    //返回手机是否处于漫游状态
    tm.isNetworkRoaming();
    // tm.listen(PhoneStateListener listener, int events) ;
    //解释:
    //IMSI是国际移动用户识别码的简称(International Mobile Subscriber Identity)
    //IMSI共有15位,其结构如下:
    //MCC+MNC+MIN
    //MCC:Mobile Country Code,移动国家码,共3位,中国为460;
    //MNC:Mobile NetworkCode,移动网络码,共2位
    //在中国,移动的代码为电00和02,联通的代码为01,电信的代码为03
    //合起来就是(也是Android手机中APN配置文件中的代码):
    //中国移动:46000 46002
    //中国联通:46001
    //中国电信:46003
    //举例,一个典型的IMSI号码为460030912121001
    //IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称
    //IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的
    //其组成为:
    //1. 前6位数(TAC)是”型号核准号码”,一般代表机型
    //2. 接着的2位数(FAC)是”最后装配号”,一般代表产地
    //3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号
    //4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用
  }
}

希望本文所述对大家的Android程序设计有所帮助。

(0)

相关推荐

  • Android中TelephonyManager用法实例

    本文实例讲述了Android中TelephonyManager用法.分享给大家供大家参考,具体如下: 一.概述: TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取相关数据. TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是

  • Android 应用更换皮肤实现方法

    Android应用更换皮肤功能的实现思路   我们可以将皮肤包做成一个apk文件,在应用apk中读取皮肤包中的数据.   应用apk读取皮肤包apk的数据的条件 1. 有相同签名 2. AndroidManifest.xml中配置android:sharedUserId有相同的属性值 满足以上条件,两个apk就能互相访问数据了.      Android应用更换皮肤功能的实现步骤 1.应用程序和皮肤程序的AndroidManifest.xml中配置 XML/HTML代码 android:shar

  • Android GPS详解及示例代码

    LBS(Location Based Services)直译的话就是基于地理位置的服务,这里面至少有两层意思,第一要能轻易的获取当前的地理位置,譬如经纬度海拔等,另一个就是在当前位置的基础上提供增值服务,譬如找附近的加油站.餐馆.酒店等.这里面的第一步:获取用户当前位置,我们就可以用Android的GPS定位服务来得到.Android提供了基于网络的定位服务和基于卫星的定位服务两种.在设置->位置和安全设置里面的前三项就是,最后一个增强型GPS是为了辅助快速找卫星的. 那么我们现在就写一个简单的

  • Android中TelephonyManager类的用法案例详解

    本文以案例形式分析了Android中TelephonyManager类的用法.分享给大家供大家参考.具体如下: 目录结构: main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="ve

  • Android如何自定义按钮效果

    安卓原生的按钮是多么丑,效果是多么单调,大家也是有目共睹的. 要做一个APP少不了使用按钮,一个好看的按钮少不了好看的效果和外表,这次主要跟大家讲讲如何用drawable的xml文件弄一些好看的自定义样式. 首先是外表 在APP中四四方方,灰色底黑色字的按钮是很难看的,我们希望看到的是圆角,彩色,白字(根据你的个人审美也可以是其他样式). 首先是在layout里新建一个按钮 ,然后在drawable文件夹里新建一个drawable resource file ,不妨起名为shape ,加一个se

  • Android提高之TelephonyManager功能探秘

    前面文章介绍了如何使用JAVA的反射机制来调用蓝牙的隐藏API,本文继续来练习JAVA的反射机制,探秘TelephonyManager在Framework里包含却在SDK隐藏的几项功能. 先来看一下本文程序运行的效果图,如下所示: 本文程序演示了以下功能: 1.所有来电自动接听: 2.所有来电自动挂断: 3.开启/关闭Radio: 4.开启/关闭数据连接(WAP or NET的连接). 调用TelephonyManager的隐藏API是先参考Framework的/base/telephony/j

  • Android TelephonyManager详解及实现代码

    JAVA的反射机制,探秘TelephonyManager在Framework里包含却在SDK隐藏的几项功能.先来看看本文程序运行的效果图: 本文程序演示了以下功能: 1.所有来电自动接听:        2.所有来电自动挂断:        3.开启/关闭Radio:        4.开启/关闭数据连接(WAP or NET的连接). 调用TelephonyManager的隐藏API是先参考Framework的/base/telephony/java/com/android/internal/

  • 安卓(Android)开发之统计App启动时间

    前言 作为 Android 开发者,想必多多少少要接触启动速度优化相关的事情,当用户越来越多,产品的功能也随着迭代越来越多,App 逐渐变得臃肿是一件很常见的现象,甚至可以说是不可避免的现象,随之而来的工作就是优化 App 性能,其中最主要的一项就是启动速度优化.但本文的主角并不是启动速度优化,而是启动时间统计. 一.启动类型 工欲善其事,必先利其器.想要优化 App 的启动速度,必须有准确衡量启动时间的方法,否则优化完之后效果怎样,自己都不知道,说出去别人也不信服不是.在做 App 启动时间统

  • Android中TelephonyManager类的方法实例分析

    本文实例讲述了Android中TelephonyManager类的方法.分享给大家供大家参考.具体如下: TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取相关数据. TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯

  • android中Handle类的用法实例分析

    本文实例讲述了android中Handle类的用法.分享给大家供大家参考.具体如下: 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉.Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响. 当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Ac

  • android针对json数据解析方法实例分析

    本文实例讲述了android针对json数据解析方法.分享给大家供大家参考.具体如下: JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.

  • jsp中Action使用session方法实例分析

    本文实例分析了jsp中Action使用session方法.分享给大家供大家参考.具体如下: 在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到 1.通过ActionContext class中的方法getSession得到 2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作 下面先看一个采用第一种方式,在action中得到session的例子 复制代码 代码如下: p

  • Android中AsyncTask与handler用法实例分析

    本文实例讲述了Android中AsyncTask与handler用法.分享给大家供大家参考,具体如下: 首先,我们得明确下一个概念,什么是UI线程.顾名思义,ui线程就是管理着用户界面的那个线程! android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以.这种模式叫做单线程模式. 我们在单线程模式下编程一定要注意:不要阻塞ui线程.确保只在ui线程中访问ui组件 当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发现,我们根本没

  • Android中GridView和ArrayAdapter用法实例分析

    本文实例分析了Android中GridView和ArrayAdapter用法.分享给大家供大家参考,具体如下: GridView是一个表格化的二维排版的View,当GridView的文字放不下时会出现scrolling的效果,GridView中的元素命名为Item,要将Item放入GridView,需要ArrayAdapter对象. 例子如下: import android.app.Activity; import android.os.Bundle; import android.view.V

  • python中base64加密解密方法实例分析

    本文实例讲述了python中base64加密解密方法.分享给大家供大家参考.具体分析如下: 一.base64 Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符.三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示.它可用来作为电子邮件的传输编码.在Base64中的可打印字符包括字母A-Z.a-z.数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同.编码后的

  • Android编程之九宫格实现方法实例分析

    本文实例讲述了Android编程之九宫格实现方法.分享给大家供大家参考,具体如下: 显示九宫格需要用GridView , 要显示每个格子中的视图有两种方式,第一种方式是做成xml文件,再将xml文件做成视图.第二种方式就是在代码中构建出这样一种布局,这里采用第一种方式来实现: GridView: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="ht

  • Android中SeekBar和RatingBar用法实例分析

    本文实例讲述了Android中SeekBar和RatingBar用法.分享给大家供大家参考,具体如下: 什么是SeekBar? 可以拖动的进度条(在播放器中使用最常见) 1.在布局文件中声明 <SeekBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/seekBar" /> 2.定义一个OnSeekB

随机推荐