[Android]监听(获取)未读短信和未接电话(demo)

Demo 下载地址:http://download.csdn.net/detail/u011634756/5915467免积分哦

-----------------------华丽的分割线------------------------------


一、原理

1. 实现2个ContentObserver 分别用来监听数据库的变化

2. 数据库发生变化则 进行查询数据

3. 把查询的数据表现出来

二、实现

1. 实现2个ContentObserver 分别用来监听数据库的变化

private class SmsMmsContentObserver extends ContentObserver {

		public SmsMmsContentObserver() {
			super(new Handler());
		}

		@Override
		public void onChange(boolean selfChange) {
			Log.i(TAG, "SmsMmsContentObserver , onChange");
			// 大数据操作 在线程中 进行
			mHandler.post(new Runnable() {

				@Override
				public void run() {
					UpdateUnreadMmsSms(getApplicationContext());
					mHandler.sendEmptyMessage(0);
				}
			});
			super.onChange(selfChange);
		}
	}

	private class ContactsContentObserver extends ContentObserver {

		public ContactsContentObserver() {
			super(new Handler());
		}

		@Override
		public void onChange(boolean selfChange) {
			Log.i(TAG, "ContactsContentObserver , onChange");
			// 大数据操作 在线程中 进行
			mHandler.post(new Runnable() {

				@Override
				public void run() {
					UpdateUnAnsweredCalls(getApplicationContext());
					mHandler.sendEmptyMessage(0);
				}
			});
			super.onChange(selfChange);
		}
	}

2. 数据库发生变化则 进行查询数据

	/**
	 * 获取 未读短信数量
	 * 
	 * @param context
	 * @return
	 */
	public static void UpdateUnreadMmsSms(Context context) {
		Cursor cur = null;
		
		try {
			cur = context.getContentResolver().query(
					Uri.parse("content://l-message_summary"),
					null, "known = 0 and read = 0", null, null);
			if (null != cur) {
				SMS_NUM = cur.getCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (cur != null) {
				cur.close();
			}
		}
		
	}

	/**
	 * 获取 未接电话
	 * 
	 * @param context
	 * @return
	 */
	public static void UpdateUnAnsweredCalls(Context context) {
		Cursor cur = null;
		
		try {
			cur = context.getContentResolver().query(Calls.CONTENT_URI, null,
					"type = 3 and new = 1", null, null);
			if (null != cur) {
				PHONE_NUM = cur.getCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (cur != null) {
				cur.close();
			}
		}
		
	}

3. 把查询的数据表现出来

	private void updateUI(){
		tvSms.setText("短信:" +  SMS_NUM);
		tvPhone.setText("未接: " + PHONE_NUM);
	}

---------------------------------------

简单demo 上一个简单的截图



====================关注小鱼===================

新浪微博http://weibo.com/AwareMissing

腾讯微博http://t.qq.com/y_haiyang


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值