`
lmx227
  • 浏览: 52350 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

TelephonyManager

 
阅读更多
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:id="@+id/phone_type"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <TextView android:id="@+id/network_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <TextView android:id="@+id/sim_state"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <TextView android:id="@+id/network_type"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

 

import android.app.Activity;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.widget.TextView;

public class NetworkDetector extends Activity {
	
	//SIM卡状态常量
	private static final String SIM_ABSENT = "Absent"; //手机内无SIM卡
	private static final String SIM_READY = "Ready"; //SIM卡已准备好
	private static final String SIM_PIN_REQUIRED = "PIN required"; //需要SIM卡的PIN解锁
	private static final String SIM_PUK_REQUIRED = "PUK required"; //需要SIM卡的PUK解锁 
	private static final String SIM_NETWORK_LOCKED = "Network locked"; //需要Network PIN解锁
	private static final String SIM_UNKNOWN = "Unknown"; //状态未知
    
    //网络类型常量
	private static final String NETWORK_CDMA = "CDMA: Either IS95A or IS95B (2G)";
	private static final String NETWORK_EDGE = "EDGE (2.75G)";
	private static final String NETWORK_GPRS = "GPRS (2.5G)";
	private static final String NETWORK_UMTS = "UMTS (3G)";
    private static final String NETWORK_EVDO_0 = "EVDO revision 0 (3G)";
    private static final String NETWORK_EVDO_A = "EVDO revision A (3G - Transitional)";
    private static final String NETWORK_EVDO_B = "EVDO revision B (3G - Transitional)";
    private static final String NETWORK_1X_RTT = "1xRTT  (2G - Transitional)";
    private static final String NETWORK_HSDPA = "HSDPA (3G - Transitional)";
    private static final String NETWORK_HSUPA = "HSUPA (3G - Transitional)";
    private static final String NETWORK_HSPA = "HSPA (3G - Transitional)";
    private static final String NETWORK_IDEN = "iDen (2G)";
    private static final String NETWORK_UNKOWN = "Unknown";
    
    //手机制式类型常量
    private static final String PHONE_CDMA = "CDMA";
    private static final String PHONE_GSM = "GSM";
    private static final String PHONE_NONE = "No radio";
    	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.network_detector);
        
        //获取telephony系统服务,用于取得SIM卡和网络相关信息
        final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        
        //更新界面上相关网络信息
        updateViews(tm);
        
        //由于SIM卡状态和网络信息随时都可能发生变化,因此需要注册PhoneStateListener
        //来实时更新界面显示的信息。这里监听两个事件:LISTEN_SERVICE_STATE和LISTEN_DATA_CONNECTION_STATE
        //它们分别对应回调函数onServiceStateChanged和onDataConnectionStateChanged
        tm.listen(new PhoneStateListener() {

			@Override
			public void onDataConnectionStateChanged(int state, int networkType) {
				//数据连接状态改变可能导致网络类型的改变
				updateViews(tm);
			}

			@Override
			public void onServiceStateChanged(ServiceState serviceState) {
				updateViews(tm);
			}
        	
        }, PhoneStateListener.LISTEN_SERVICE_STATE 
        		| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
    }
    
	@Override
	protected void onResume() {
		super.onResume();
		final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		updateViews(tm);
	}
    
    /**
     * 更新SIM卡状态和网络信息
     * @param tm
     */
    private final void updateViews(TelephonyManager tm) {
    	TextView view = null;
    	
    	view = (TextView) findViewById(R.id.sim_state);
    	view.setText("SIM State : " + mapSimStateToName(tm.getSimState()));
    	
    	view = (TextView) findViewById(R.id.network_type);
    	view.setText("Network Type : " + mapNetworkTypeToName(tm.getNetworkType()));
    	
    	view = (TextView) findViewById(R.id.network_name);
    	view.setText("Network Operator : " + tm.getNetworkOperatorName());
    	
    	view = (TextView) findViewById(R.id.phone_type);
    	view.setText("Phone Type : " + mapDeviceTypeToName(tm.getPhoneType()));
    	
    }

    /**
     * 将手机制式值以字符串形式返回
     * @param phoneType
     * @return
     */
	private String mapDeviceTypeToName(int phoneType) {
        switch (phoneType) {
        case TelephonyManager.PHONE_TYPE_CDMA:
            return PHONE_CDMA;
        case TelephonyManager.PHONE_TYPE_GSM:
            return PHONE_GSM;
        case TelephonyManager.PHONE_TYPE_NONE:
            return PHONE_NONE;
        default:
        	//不应该走到这个分支
            return null;
        }
	}

	/**
	 * 将网络类型值以字符串形式返回
	 * @param networkType
	 * @return
	 */
	private String mapNetworkTypeToName(int networkType) {
        switch (networkType) {
        case TelephonyManager.NETWORK_TYPE_CDMA:
            return NETWORK_CDMA;
        case TelephonyManager.NETWORK_TYPE_EDGE:
            return NETWORK_EDGE;
        case TelephonyManager.NETWORK_TYPE_GPRS:
            return NETWORK_GPRS;
        case TelephonyManager.NETWORK_TYPE_UMTS:
            return NETWORK_UMTS;
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
            return NETWORK_EVDO_0;
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
            return NETWORK_EVDO_A;
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
            return NETWORK_EVDO_B;
        case TelephonyManager.NETWORK_TYPE_1xRTT:
            return NETWORK_1X_RTT;
        case TelephonyManager.NETWORK_TYPE_HSDPA:
            return NETWORK_HSDPA;
        case TelephonyManager.NETWORK_TYPE_HSPA:
            return NETWORK_HSPA;
        case TelephonyManager.NETWORK_TYPE_HSUPA:
            return NETWORK_HSUPA;
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return NETWORK_IDEN;
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
        default:
            return NETWORK_UNKOWN;
        }
	}

	/**
	 * 将SIM卡状态值以字符串形式返回
	 * @param simState
	 * @return
	 */
	private static String mapSimStateToName(int simState) {
        switch (simState) {
        case TelephonyManager.SIM_STATE_ABSENT:
            return SIM_ABSENT;
        case TelephonyManager.SIM_STATE_READY:
            return SIM_READY;
        case TelephonyManager.SIM_STATE_PIN_REQUIRED:
            return SIM_PIN_REQUIRED;
        case TelephonyManager.SIM_STATE_PUK_REQUIRED:
            return SIM_PUK_REQUIRED;
        case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
            return SIM_NETWORK_LOCKED;
        case TelephonyManager.SIM_STATE_UNKNOWN:
            return SIM_UNKNOWN;
        default:
            //不应该走到这个分支
            return null;
        }
	}
	
}

 

分享到:
评论

相关推荐

    TelephonyManager类使用方法大全

    TelephonyManager 类使用方法大全 TelephonyManager 类是 Android 中的一个系统服务,提供了许多关于手机的信息和功能,可以帮助开发者获取设备的各种状态和信息。本文将详细介绍 TelephonyManager 类的使用方法和...

    电话管理器(TelephonyManager)

    电话管理器(TelephonyManager)是Android系统中的一个重要组件,主要负责处理与手机通话功能相关的各种信息和操作。它提供了一系列API,使开发者能够获取到设备的电话状态、SIM卡信息以及网络连接等数据,从而在...

    Android以TelephonyManager取得話機狀態

    在Android系统中,`TelephonyManager`类是用于获取设备电话功能相关信息的主要接口。通过这个类,开发者可以访问到手机的状态,例如网络连接状态、SIM卡信息以及来电、去电和接听电话的事件。本篇将深入探讨如何利用...

    TelephonyManager电话服务

    在Android系统中,`TelephonyManager`类是用于与设备的电话功能进行交互的重要接口。它提供了各种方法,让我们能够获取到与电话相关的硬件信息、状态以及服务功能。本篇文章将详细探讨`TelephonyManager`类的核心...

    Android之TelephonyManager类的方法详解

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

    Android TelephonyManager详解及实现代码

    在Android开发中,`TelephonyManager`是一个非常重要的类,它用于获取设备的电话相关信息,如SIM卡状态、运营商信息、手机类型等。然而,它的功能远不止这些,通过使用Java的反射机制,我们还可以访问到一些隐藏的...

    Android提高之TelephonyManager功能探秘

    前面文章介绍了如何使用JAVA的反射机制来调用蓝牙的隐藏API,本文继续来练习JAVA的反射机制,探秘TelephonyManager在Framework里包含却在SDK隐藏的几项功能。 先来看一下本文程序运行的效果图,如下所示: 本文程序...

    Android中TelephonyManager类的用法案例详解

    在Android开发中,TelephonyManager类是用于获取设备电话功能相关信息的重要工具。它提供了一系列方法,可以帮助开发者获取手机硬件信息,如IMEI、SIM卡信息、网络运营商等。本篇文章将详细讲解如何使用...

    Android应用源码之TelephonyManagerSample.zip

    在Android平台上,`TelephonyManager`是Android系统提供的一个关键接口,用于获取设备的电话功能信息。`TelephonyManagerSample.zip`很可能包含了一个示例项目,教导开发者如何使用`TelephonyManager` API来获取和...

    Android中TelephonyManager用法实例

    在Android系统中,`TelephonyManager`是Android SDK提供的一个关键类,用于获取与电话通信相关的各种信息。这个类提供了许多方法,允许开发者访问手机的SIM卡状态、网络连接状态以及用户信息。在实际应用开发中,`...

    Android实现监听电话呼叫状态的方法

    TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); ``` 然后,我们需要创建一个`PhoneStateListener`的子类,这个监听器会接收并处理电话状态的变化。在子类中重写`...

    Android中TelephonyManager类的方法实例分析

    Android中的`TelephonyManager`类是系统服务的一个关键组件,它提供了访问手机通信相关状态和信息的接口。开发者可以使用这个类来获取关于手机硬件、网络状态以及SIM卡等信息。在Android应用程序中,`...

    android判断网络状态、网络运营商、网络类型

    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String operatorName = telephonyManager.getNetworkOperatorName(); ``` `getNetworkOperatorName()`方法...

    Android(安卓)应用开发技术 TelephonyManager闹铃管理器的使用案例源代码.rar

    Android(安卓)应用开发技术 TelephonyManager闹铃管理器的使用案例源代码.rar Android(安卓)应用开发技术 TelephonyManager闹铃管理器的使用案例源代码.rar Android(安卓)应用开发技术 TelephonyManager闹铃...

    android信号强度检测

    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); ``` 2. **获取信号强度**: 对于GSM网络,可以使用`getVoiceNetworkType()`来判断网络类型,然后调用`...

    获取通话状态

    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); ``` 接下来,我们关注如何获取通话状态。`TelephonyManager`提供了几个关键的方法来获取当前的通话状态: ...

    Android Studio3.5版本电话监听器出现telephonymanager.services.ListenService$MyListen.onCallStateChanged错误

    1.在telephonymanager/src/main/AndroidManifest.xml中添加如下代码; 2.运行程序后,在虚拟机上打开 设置–&gt;应用和通知–&gt;搜索我们正在运行的应用程序–&gt;权限–&gt;将存储空间和麦克风权限设置为开启;(具体操作如...

Global site tag (gtag.js) - Google Analytics