Android提供的系统服务之--TelephonyManager(电话管理器)

Android提供的系统服务之--TelephonyManager(电话管理器)

转载请注明出处——coder-pig

TelephonyManager的作用:

用于管理手机通话状态,获取电话信息(设备信息、sim卡信息以及网络信息),

侦听电话状态(呼叫状态服务状态、信号强度状态等)以及可以调用电话拨号器拨打电话!

如何获得TelephonyManager的服务对象:

TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

TelephonyManager的相关用法实例:

1.调用拨号器拨打电话号码:

Uri uri=Uri.parse("tel:"+电话号码);
Intent intent=new Intent(Intent.ACTION_DIAL,uri);
startActivity(intent);  

ps:调用的是系统的拨号界面哦!

2.获取Sim卡信息与网络信息

运行效果图:(模拟器下获取不了相关信息的哦,这里用的是真机哈!)

代码实现流程:

1.定义了一个存储状态名称的array.xml的数组资源文件;

2.布局定义了一个简单的listview,列表项是两个水平方向的textview

3.Activity界面中调用相关方法获得对应参数的值,再把数据绑定到listview上!

详细代码如下:

array.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<!-- 声明一个名为statusNames的字符串数组 -->
	<string-array name="statusNames">
		<item>设备编号</item>
		<item>软件版本</item>
		<item>网络运营商代号</item>
		<item>网络运营商名称</item>
		<item>手机制式</item>
		<item>设备当前位置</item>
		<item>SIM卡的国别</item>
		<item>SIM卡序列号</item>
		<item>SIM卡状态</item>
	</string-array>
	<!-- 声明一个名为simState的字符串数组 -->
	<string-array name="simState">
		<item>状态未知</item>
		<item>无SIM卡</item>
		<item>被PIN加锁</item>
		<item>被PUK加锁</item>
		<item>被NetWork PIN加锁</item>
		<item>已准备好</item>
	</string-array>
	<!-- 声明一个名为phoneType的字符串数组 -->
	<string-array name="phoneType">
		<item>未知</item>
		<item>GSM</item>
		<item>CDMA</item>
	</string-array>
</resources>

布局代码如下:

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.jay.example.getphonestatus.MainActivity" >

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/statuslist" />

</LinearLayout>

line.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
		android:id="@+id/name"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:width="230px"
		android:textSize="16dp"
	/>

	<TextView
		android:id="@+id/value"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:paddingLeft="8px"
		android:textSize="16dp"
	/>

</LinearLayout>

MainActivity.java

package com.jay.example.getphonestatus;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	//定义一个ListView对象,一个代表状态名称的数组,以及手机状态的集合
	private ListView showlist;
	private String[] statusNames;
	private ArrayList<String> statusValues = new ArrayList<String>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		showlist = (ListView) findViewById(R.id.statuslist);

		//①获得系统提供的TelphonyManager对象的实例
		TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

		//②获得状态名词的数组,Sim卡状态的数组,电话网络类型的数组
		//就是获得array.xml中的对应数组名的值
		statusNames = getResources().getStringArray(R.array.statusNames);
		String[] simState = getResources().getStringArray(R.array.simState);
		String[] phoneType = getResources().getStringArray(R.array.phoneType);

		//③按照array.xml中的顺序,调用对应的方法,将相应的值保存到集合里
		statusValues.add(tManager.getDeviceId());     //获得设备编号
		//获取系统平台的版本
		statusValues.add(tManager.getDeviceSoftwareVersion()
				!= null? tManager.getDeviceSoftwareVersion():"未知");
		statusValues.add(tManager.getNetworkOperator());  //获得网络运营商代号
		statusValues.add(tManager.getNetworkOperatorName()); //获得网络运营商的名称
		statusValues.add(phoneType[tManager.getPhoneType()]); //获得手机的网络类型
		// 获取设备所在位置
		statusValues.add(tManager.getCellLocation() != null ? tManager
					.getCellLocation().toString() : "未知位置");
		statusValues.add(tManager.getSimCountryIso());      // 获取SIM卡的国别
		statusValues.add(tManager.getSimSerialNumber());    // 获取SIM卡序列号
		statusValues.add(simState[tManager.getSimState()]); // 获取SIM卡状态

		//④遍历状态的集合,把状态名与对应的状态添加到集合中
		ArrayList<Map<String, String>> status =
				new ArrayList<Map<String, String>>();
		for (int i = 0; i < statusValues.size(); i++)
		{
			HashMap<String, String> map = new HashMap<String, String>();
			map.put("name", statusNames[i]);
			map.put("value", statusValues.get(i));
			status.add(map);
		}
		//⑤使用SimpleAdapter封装List数据
		SimpleAdapter adapter = new SimpleAdapter(this, status,
			R.layout.line, new String[] { "name", "value" }
			, new int[] { R.id.name, R.id.value });
		// 为ListView设置Adapter
		showlist.setAdapter(adapter);
	}
}

最后别忘了,往AndroidManifest.xml文件中添加下述权限哦!

    <!-- 添加访问手机位置的权限 -->
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
	<!-- 添加访问手机状态的权限 -->
	<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

3.监听手机的所有来电:

对于监听到的通话记录结果,你可以采取不同的方式获取到,这里用到的是把通话记录写入到文件中,

而你也可以以短信的形式发送给你,或者是上传到某个平台,当然如果通信记录不多的话还可以用短信

多了的话就很容易给人发现的了!

另外,这里用的是Activity而非Service,就是说要打开这个Activity,才可以进行监听,通常我们的需求都是

要偷偷滴在后台跑的,因为时间关系就不写Service的了,大家自己写写吧,让Service随开机一起启动即可!

代码解析:

很简单,其实就是重写TelephonyManager的一个通话状态监听器PhoneStateListener

然后调用TelephonyManager.listen()的方法进行监听,当来电的时候,

程序就会将来电号码记录到文件中

MainActivity.java:

package com.jay.PhoneMonitor;

import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.io.PrintStream;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import java.util.Date;

public class MainActivity extends Activity
{
	TelephonyManager tManager;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 取得TelephonyManager对象
		tManager = (TelephonyManager)
			getSystemService(Context.TELEPHONY_SERVICE);
		// 创建一个通话状态监听器
		PhoneStateListener listener = new PhoneStateListener()
		{
			@Override
			public void onCallStateChanged(int state, String number)
			{
				switch (state)
				{
				// 无任何状态
					case TelephonyManager.CALL_STATE_IDLE:
						break;
					case TelephonyManager.CALL_STATE_OFFHOOK:
						break;
					// 来电铃响时
					case TelephonyManager.CALL_STATE_RINGING:
						OutputStream os = null;
						try
						{
							os = openFileOutput("phoneList", MODE_APPEND);
						}
						catch (FileNotFoundException e)
						{
							e.printStackTrace();
						}
						PrintStream ps = new PrintStream(os);
						// 将来电号码记录到文件中
						ps.println(new Date() + " 来电:" + number);
						ps.close();
						break;
					default:
						break;
				}
				super.onCallStateChanged(state, number);
			}
		};
		// 监听电话通话状态的改变
		tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
	}
}

当然还需要在AndroidManifest.xml中添加下面的权限:

<!-- 授予该应用读取通话状态的权限 -->
	<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

运行效果:

注意!要让这个程序位于前台哦!用另一个电话拨打该电话,接着就可以在DDMS的file Explorer的应用

对应包名的files目录下看到phoneList的文件了,我们可以将他导出到电脑中打开,文件的大概内容如下:

THR Oct 30 12:05:48 GMT 2014 来电: 137xxxxxxx

4.黑名单来电自动挂断:

所谓的黑名单就是将一些电话号码添加到一个集合中,当手机接收到这些电话的时候就直接挂断!

但是Android并没有给我们提供挂断电话的API,于是乎我们需要通过AIDL来调用服务中的API来

实现挂断电话!

于是乎第一步要做的就是把android源码中的下面两个文件复制到src下的相应位置,他们分别是:

com.android.internal.telephony包下的ITelephony.aidl;

android.telephony包下的NeighboringCellInfo.aidl;

要创建对应的包哦!就是要把aidl文件放到上面的包下!!!

接着只需要调用ITelephony的endCall即可挂断电话!

这里给出的是简单的单个号码的拦截,输入号码,点击屏蔽按钮后,如果此时屏蔽的电话呼入的话;

直接会挂断,代码还是比较简单的,下面粘一下,因为用的模拟器是Genymotion,所以就不演示

程序运行后的截图了!

MainActivity.java:

package com.jay.example.locklist;

import java.lang.reflect.Method;

import com.android.internal.telephony.ITelephony;

import android.app.Activity;
import android.os.Bundle;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

	private TelephonyManager tManager;
	private PhoneStateListener pListener;
	private String number;
	private EditText locknum;
	private Button btnlock;

	public class PhonecallListener extends PhoneStateListener
	{
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			switch(state)
			{
			case TelephonyManager.CALL_STATE_IDLE:break;
			case TelephonyManager.CALL_STATE_OFFHOOK:break;
			//当有电话拨入时
			case TelephonyManager.CALL_STATE_RINGING:
				if(isBlock(incomingNumber))
				{
					try
					{
						Method method = Class.forName("android.os.ServiceManager")
								.getMethod("getService", String.class);
						// 获取远程TELEPHONY_SERVICE的IBinder对象的代理
						IBinder binder = (IBinder) method.invoke(null,
							new Object[] { TELEPHONY_SERVICE });
						// 将IBinder对象的代理转换为ITelephony对象
						ITelephony telephony = ITelephony.Stub.asInterface(binder);
						// 挂断电话
						telephony.endCall();
					}catch(Exception e){e.printStackTrace();}
				}
				break;
			}
			super.onCallStateChanged(state, incomingNumber);
		}
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		locknum = (EditText) findViewById(R.id.locknum);
		btnlock = (Button) findViewById(R.id.btnlock);

		//获取系统的TelephonyManager管理器
		tManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		pListener = new PhoneStateListener();
		tManager.listen(pListener, PhoneStateListener.LISTEN_CALL_STATE);

		btnlock.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				number = locknum.getText().toString();
			}
		});

	}

	public boolean isBlock(String phone)
	{
		if(phone.equals(number))return true;
		return false;
	}

}

另外还需要添加下述的权限:

<!-- 授予该应用控制通话的权限 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- 授予该应用读取通话状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

当然,更多的时候我们屏蔽的不会只是一个号码,这个时候可以使用集合,把多个要屏蔽的号码添加到

集合中,或者是文件中,这里就直接给出李刚老师的demo,他提供的是一个带复选框的列表供用户

勾选黑名单,这里就不解析了,直接给出代码下载吧!

单个号码拦截的demo:点击下载

李刚老师的列表黑名单拦截demo:点击下载

TelephonyManager的相关属性与方法:

Constants


String


ACTION_PHONE_

STATE_CHANGED


Broadcast intent action indicating that the call state (cellular)

on the device has changed.


int


CALL_STATE_IDLE


Device call state: No activity.

空闲(无呼入或已挂机)


int


CALL_STATE_OFFHOOK


Device call state: Off-hook.

摘机(有呼入)


int


CALL_STATE_RINGING


Device call state: Ringing.

响铃(接听中)


int


DATA_ACTIVITY_DORMANT


Data connection is active, but physical link is down

电话数据活动状态类型:睡眠模式(3.1版本)


int


DATA_ACTIVITY_IN


Data connection activity: Currently receiving IP PPP traffic.

电话数据活动状态类型:数据流入


int


DATA_ACTIVITY_INOUT


Data connection activity: Currently both sending and receiving

IP PPP traffic.电话数据活动状态类型:数据交互


int


DATA_ACTIVITY_NONE


Data connection activity: No traffic.

电话数据活动状态类型:无数据流动


int


DATA_ACTIVITY_OUT


Data connection activity: Currently sending IP PPP traffic.

电话数据活动状态类型:数据流出


int


DATA_CONNECTED


Data connection state: Connected.

数据连接状态类型:已连接


int


DATA_CONNECTING


Data connection state: Currently setting up a data connection.

数据连接状态类型:正在连接


int


DATA_DISCONNECTED


Data connection state: Disconnected.

数据连接状态类型:断开


int


DATA_SUSPENDED


Data connection state: Suspended.

数据连接状态类型:已暂停


String


EXTRA_INCOMING_NUMBER


The lookup key used with the ACTION_PHONE_STATE_CHANGED

broadcast for a String containing the incoming phone number.


String


EXTRA_STATE


The lookup key used with the ACTION_PHONE_STATE_CHANGED

broadcast for a String containing the new call state.


int


NETWORK_TYPE_1xRTT


Current network is 1xRTT


int


NETWORK_TYPE_CDMA


Current network is CDMA: Either IS95A or IS95B


int


NETWORK_TYPE_EDGE


Current network is EDGE


int


NETWORK_TYPE_EHRPD


Current network is eHRPD


int


NETWORK_TYPE_EVDO_0


Current network is EVDO revision 0


int


NETWORK_TYPE_EVDO_A


Current network is EVDO revision A


int


NETWORK_TYPE_EVDO_B


Current network is EVDO revision B


int


NETWORK_TYPE_GPRS


Current network is GPRS


int


NETWORK_TYPE_HSDPA


Current network is HSDPA


int


NETWORK_TYPE_HSPA


Current network is HSPA


int


NETWORK_TYPE_HSPAP


Current network is HSPA+


int


NETWORK_TYPE_HSUPA


Current network is HSUPA


int


NETWORK_TYPE_IDEN


Current network is iDen


int


NETWORK_TYPE_LTE


Current network is LTE


int


NETWORK_TYPE_UMTS


Current network is UMTS


int


NETWORK_TYPE_UNKNOWN


Network type is unknown


int


PHONE_TYPE_CDMA


Phone radio is CDMA.


int


PHONE_TYPE_GSM


Phone radio is GSM.


int


PHONE_TYPE_NONE


No phone radio.


int


PHONE_TYPE_SIP


Phone is via SIP.


int


SIM_STATE_ABSENT


SIM card state: no SIM card is available in the device


int


SIM_STATE_NETWORK_LOCKED


SIM card state: Locked: requries a network PIN to unlock


int


SIM_STATE_PIN_REQUIRED


SIM card state: Locked: requires the user‘s SIM PIN to unlock


int


SIM_STATE_PUK_REQUIRED


SIM card state: Locked: requires the user‘s SIM PUK to unlock


int


SIM_STATE_READY


SIM card state: Ready


int


SIM_STATE_UNKNOWN


SIM card state: Unknown.

F ields


public static final String


EXTRA_STATE_IDLE


Value used with EXTRA_STATE corresponding to CALL_STATE_IDLE.


public static final String


EXTRA_STATE_OFFHOOK


Value used with EXTRA_STATE corresponding to CALL_STATE_OFFHOOK.


public static final String


EXTRA_STATE_RINGING


Value used with EXTRA_STATE corresponding to CALL_STATE_RINGING.

Public Methods


int


getCallState()


Returns a constant indicating the call state (cellular) on the device.


CellLocation


getCellLocation()


Returns the current location of the device.


int


getDataActivity()


Returns a constant indicating the type of activity on a data connection (cellular).

处理侦测到的数据活动的改变事件。通过该函数,可以获取数据活动状态信息。

电话数据活动状态类型定义在TelephoneyManager类中。

DATA_ACTIVITY_NONE            无数据流动

DATA_ACTIVITY_IN                    数据流入

DATA_ACTIVITY_OUT                数据流出

DATA_ACTIVITY_INOUT            数据交互

DATA_ACTIVITY_DORMANT     睡眠模式(2.1版本)


int


getDataState()


Returns a constant indicating the current data connection state (cellular).


String


getDeviceId()


Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for C  DMA phones.获取设备标识(IMEI)


String


getDeviceSoftwareVersion()


Returns the software version number for the device, for example, the IMEI/SV for GSM p    hones.获得软件版本


String


getLine1Number()


Returns the phone number string for line 1, for example, the MSISDN for a GSM phone.

线路1的电话号码

List<NeighboringCel lInfo>


getNeighboringCellInfo()


Returns the neighboring cell information of the device.


String


getNetworkCountryIso()


Returns the ISO country code equivalent of the current registered operator‘s MCC (Mobile

Country Code).获取网络的国家ISO代码


String


getNetworkOperator()


Returns the numeric name (MCC+MNC) of current registered operator.

获取SIM移动国家代码(MCC)和移动网络代码(MNC)


String


getNetworkOperatorName()


Returns the alphabetic name of current registered operator.

获取服务提供商姓名(中国移动、中国联通等)


int


getNetworkType()


Returns a constant indicating the radio technology (network type) currently in use on the  device for data transmission.

获取网络类型

NETWORK_TYPE_UNKNOWN 未知网络

NETWORK_TYPE_GPRS

NETWORK_TYPE_EDGE 通用分组无线服务(2.5G)

NETWORK_TYPE_UMTS    全球移动通信系统(3G)

NETWORK_TYPE_HSDPA

NETWORK_TYPE_HSUPA

NETWORK_TYPE_HSPA

NETWORK_TYPE_CDMA         CDMA网络(2.1版本)

NETWORK_TYPE_EVDO_0     CDMA2000 EV-DO版本0(2.1版本)

NETWORK_TYPE_EVDO_A     CDMA2000 EV-DO版本A(2.1版本)

NETWORK_TYPE_EVDO_B     CDMA2000 EV-DO版本B(2.1版本)

NETWORK_TYPE_1xRTT         CDMA2000 1xRTT(2.1版本)

NETWORK_TYPE_IDEN

NETWORK_TYPE_LTE

NETWORK_TYPE_EHRPD

NETWORK_TYPE_HSPAP


int


getPhoneType()


Returns a constant indicating the device phone type.

电话类型

PHONE_TYPE_NONE   未知

PHONE_TYPE_GSM      GSM手机

PHONE_TYPE_CDMA   CDMA手机(2.1版本)

PHONE_TYPE_SIP         via SIP手机


String


getSimCountryIso()


Returns the ISO country code equivalent for the SIM provider‘s country code.

获取SIM卡中国家ISO代码


String


getSimOperator()


Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the  SIM.获    得SIM卡中移动国家代码(MCC)和移动网络代码(MNC)


String


getSimOperatorName()


Returns the Service Provider Name (SPN).

获取服务提供商姓名(中国移动、中国联通等)

String


getSimSerialNumber()


Returns the serial number of the SIM, if applicable.

SIM卡序列号

int


getSimState()


Returns a constant indicating the state of the device SIM card.

SIM卡状态

SIM_STATE_UNKNOWN                   未知状态

SIM_STATE_ABSENT                        未插卡

SIM_STATE_PIN_REQUIRED          需要PIN码,需要SIM卡PIN码解锁

SIM_STATE_PUK_REQUIRED        需要PUK码,需要SIM卡PUK码解锁

SIM_STATE_NETWORK_LOCKED    网络被锁定,需要网络PIN解锁

SIM_STATE_READY                           准备就绪

其中:PIN个人识别码 PUK个人解锁码


String


getSubscriberId()


Returns the unique subscriber ID, for example, the IMSI for a GSM phone.

获得客户标识(IMSI)

String


getVoiceMailAlphaTag()


Retrieves the alphabetic identifier associated with the voice mail number.


String


getVoiceMailNumber()


Returns the voice mail number.


boolean


hasIccCard()


boolean


isNetworkRoaming()


Returns true if the device is considered roaming on the current network, for GSM purposes.


void


listen(PhoneStateListener listener, int events)


Registers a listener object to receive notification of changes in specified telephony states.

侦听电话的呼叫状态。电话管理服务接口支持的侦听类型在PhoneStateListener类中定义。

PhoneStateListener类

Constants


int


LISTEN_CALL_FORWARDING_INDICATOR


Listen for changes to the call-forwarding indicator.

侦听呼叫转移指示器改变事件


int


LISTEN_CALL_STATE


Listen for changes to the device call state.

侦听呼叫状态改变事件


int


LISTEN_CELL_LOCATION


Listen for changes to the device‘s cell location. Note that this will result in

frequent callbacks to the listener.侦听设备位置改变事件


int


LISTEN_DATA_ACTIVITY


Listen for changes to the direction of data traffic on the data connection

(cellular).侦听数据连接的流向改变事件


int


LISTEN_DATA_CONNECTION_STATE


Listen for changes to the data connection state (cellular).

侦听数据连接状态改变事件


int


LISTEN_MESSAGE_WAITING_INDICATOR


Listen for changes to the message-waiting indicator.

侦听消息等待指示器改变事件


int


LISTEN_NONE


Stop listening for updates.

停止侦听


int


LISTEN_SERVICE_STATE


Listen for changes to the network service state (cellular).

侦听网络服务状态


int


LISTEN_SIGNAL_STRENGTH


This constant is deprecated. by LISTEN_SIGNAL_STRENGTHS

侦听网络信号强度


int


LISTEN_SIGNAL_STRENGTHS


Listen for changes to the network signal strengths (cellular).

Public Constructors

PhoneStateListener()

Public Methods


void


onCallForwardingIndicatorChanged(boolean cfi)


Callback invoked when the call-forwarding indicator changes.


void


onCallStateChanged(int state, String incomingNumber)


Callback invoked when device call state changes.

处理侦测到的电话呼叫状态的改变事件。通过该回调事件,可以获取来电号码,

而且可以获取电话呼叫状态。即用switch(state){case  TelephoneManager.CALL_STATE_……}来判断


void


onCellLocationChanged(CellLocation location)


Callback invoked when device cell location changes.


void


onDataActivity(int direction)


Callback invoked when data activity state changes.


void


onDataConnectionStateChanged(int state)


Callback invoked when connection state changes.


void


onDataConnectionStateChanged(int state, int networkType)


same as above, but with the network type.

处理侦测到的数据连接状态的改变状态。通过该回调函数,

可以获取数据连接状态信息。

数据连接类型

DATA_DISCONNECTED    断开

DATA_CONNECTING         正在连接

DATA_CONNECTED          已连接

DATA_SUSPENDED           已暂停


void


onMessageWaitingIndicatorChanged(boolean mwi)


Callback invoked when the message-waiting indicator changes.


void


onServiceStateChanged(ServiceState serviceState)


Callback invoked when device service state changes.

处理侦测到的服务状态的改变事件。通过该回调函数可以获取服务状态信息。

电话服务状态类型定义在ServiceState类中。


void


onSignalStrengthChanged(int asu)


This method is deprecated. Use onSignalStrengthsChanged(SignalStrength)

处理侦测到的信号强度的改变事件。通过该回调函数,可以获取信号强度类型。


void


onSignalStrengthsChanged(SignalStrength signalStrength)


Callback invoked when network signal strengths changes.

参考文献:

1.李刚老师的Android疯狂讲义

2.相关属性与方法摘自:http://www.linuxidc.com/Linux/2011-10/45049.htm

时间: 2024-09-30 20:38:30

Android提供的系统服务之--TelephonyManager(电话管理器)的相关文章

Android提供的系统服务之--AudioManager(音频管理器)

Android提供的系统服务之--AudioManager(音频管理器) ----转载请注明出处:coder-pig AudioManager相关简介与常用方法图: 简单的使用例子: 使用Mediaplayer播放音乐,通过AudioManager调节音量大小与静音: 这里,我们需要把要播放的音频文件放到res下的raw文件夹,这个文件夹默认是没有的,需要自己创建哦! 用来放原生资源的,就是打包编译的时候不会把他变成二进制文件!!! 先来看看效果图吧: 就是播放音乐,然后调高音量的时候可以看到滑

Android基础入门教程——10.1 TelephonyManager(电话管理器)

Android基础入门教程--10.1 TelephonyManager(电话管理器) 标签(空格分隔): Android基础入门教程 本节引言: 本章节是Android基础入门教程的最后一章,主要讲解是一些零零散散的一些知识点,以及一些遗漏 知识点的补充,这些零散的知识点包括,各种系统服务的使用,比如本节的电话管理器,短信管理器, 振动器,闹钟,壁纸等等,还有传感器之类的东西!乱七八糟什么都有哈!好的,本节我们要学习的 是TelephonyManager,见名知义:用于管理手机通话状态,获取电

Android提供的系统服务之--WindowManager(窗口管理服务)

Android提供的系统服务之--WindowManager(窗口管理服务) --转载请注明出处:coder-pig 本节引言: 本节我们来探讨下这个Android系统服务中的WindowManager(窗口管理服务), 他是显示View的最底层,好像我们的Actviity和Dialog,以及Toast的底层实现都用到 这个WindowManager,他是全局的!核心其实就是WindowManager调用addView, removeView,updateViewLayout这几个方法来显示Vi

Android提供的系统服务之--SmsManager(短信管理器)

Android提供的系统服务之--SmsManager(短信管理器) --转载请注明出处:coder-pig SmsManager相关介绍以及使用图解: 当然为了方便各位,把代码粘一粘吧,就不用麻烦大家写代码了: 有需要的时候就复制粘贴下吧! 1)调用系统发送短信的功能: public void SendSMSTo(String phoneNumber,String message){ //判断输入的phoneNumber是否为合法电话号码 if(PhoneNumberUtils.isGloba

Android提供的系统服务之--PowerManager(电源服务)

Android提供的系统服务之--PowerManager(电源服务) --转载请注明出处:coder-pig 本节引言: 本节主要讲解的Android为我们提供的系统服务中的:PowerManager电源管理的一个API, 用于管理CPU运行,键盘或者屏幕亮起来;不过,除非是迫不得已吧,不然的话,否则应该尽量避免 使用这个类,并且使用完以后一定要及时释放!本节并不太深入的去讲解,因为这个设计到底层的 一些东西,以后需要用到再深入研究,到时再另外写一篇blog总结!所以本节介绍的主要是 一些基本

Android提供的系统服务之--AlarmManager(闹钟服务)

Android提供的系统服务之--AlarmManager(闹钟服务) --转载请注明出处:coder-pig 本节引言: 本节主要介绍的是Android系统服务中的---AlarmManager(闹钟服务), 除了开发手机闹钟外,更多的时候是作为一个全局的定时器,通常与Service 结合,在特定时间启动其他的组件!本节就来对这个AlarmManager来进行解析 同时通过小闹钟与自动换壁纸来演示这个AlarmManager的用法,好了,开始本节的 内容吧! 本节正文: 1.概念与相关属性方法

Android提供的系统服务之--LayoutInflater(布局服务)

Android提供的系统服务之--LayoutInflater(布局服务) --转载请注明出处:coder-pig 本节引言: 本节我们只要是介绍Android系统服务中的--LayoutInflater(布局服务), 相信大家已经习惯了通过Activity.setContentView( )方法来我们的布局文件, 底层的底层还是通过这个系统的LayoutInflater来完成的! 工作原理就是使用Android内置的pull解析器来解析布局~ 而在前几天写的blog中用到的动态布局,就是用到这

Android提供的系统服务之--Vibrator(振动器)

Android提供的系统服务之--Vibrator(振动器) --转载请注明出处:coder-pig Vibrator简介与相关方法: 简单demo--设置频率不同的振动器 对于Vibrator用的最广泛的莫过于所谓的手机按摩器类的app,在app市场一搜,一堆,笔者随便下了几个下来瞅瞅 ,都是大同小异的,这点小玩意竟然有8W多的下载量...好吧,好像也不算多,不过普遍功能都是切换振动频率来完成 所谓的按摩效果,是否真的有效就不得而知了,那么接下来 我们就来实现一个简单的按摩器吧! 核心其实就是

Android学习笔记(1)——电话拨号器

搬运自本人博客:Android学习笔记(1)--电话拨号器 程序的实现过程非常简单,大体分为以下几步: 确定程序的功能,大致确定好UI界面. 通过调整xml文件参数让界面更加美观. 在Activity文件编写代码,完成对应的事件等. 对于电话拨号器,我们最后的界面大致如下: 对应的布局文件如下,采用的是相对布局. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <Relative