在服务中监听电话的通话状态

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;

import com.example.mobilesaf.dao.AddressDao;

/**
 * 此服务用于监听电话状态,来电的时候显示电话归属地的
 * 
 * 为何不用打电话的广播接收者?因为打电话的广播接收者不能判断到底是去电还是来电。
 * @author Administrator
 * 
 * 步骤:
 * 1.在Service中的onCreate方法中添加监听
 * 2.在Service中的onDestroy方法中取消监听
 *
 */
public class ShowAddressService extends Service {
	private TelephonyManager tm;
	private MyListener listener;

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		//获取电话管理器
		tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		listener = new MyListener();
		//添加电话状态监听
		tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
	}
	
	/**
	 * 用于监听电话的通话状态
	 * 响铃
	 * 摘机(通话)
	 * 空闲
	 */
	private class MyListener extends PhoneStateListener{
		private AddressDao dao = new AddressDao(getApplicationContext());
		//覆写该方法,当电话状态改变的时候执行该方法
		public void onCallStateChanged(int state, String incomingNumber) {
			super.onCallStateChanged(state, incomingNumber);
			switch (state) {
			case TelephonyManager.CALL_STATE_RINGING://响铃状态
				String location = dao.getAddress(incomingNumber);
				Toast.makeText(getApplicationContext(), location,
						Toast.LENGTH_SHORT).show();
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK://摘机状态(通话状态)
				
				break;
			case TelephonyManager.CALL_STATE_IDLE://空闲状态
				
				break;
			}
		}
	}
	
	@Override
	public void onDestroy() {
		super.onDestroy();
		tm.listen(listener, PhoneStateListener.LISTEN_NONE);//取消电话状态监听
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值