[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 上一个简单的截图

[Android]监听(获取)未读短信和未接电话(demo)_第1张图片


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

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

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


你可能感兴趣的:(Android,Demo,Android,监听,未读短信,未接电话)