文档章节

Android内容观察者(短信窃听)

维特的烦恼
 维特的烦恼
发布于 2014/01/26 12:19
字数 250
阅读 56
收藏 0
package com.example.smswatcher;

import com.pas.model.SmsInfo;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.database.Cursor;
import android.text.Layout;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity
{

	LinearLayout layout; 
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		layout=(LinearLayout)findViewById(R.id.ll);
		ContentResolver resolver = getContentResolver();
		Uri uri = Uri.parse("content://sms/");

		//注册观察者
		resolver.registerContentObserver(uri, true, new MyObserver(new Handler()));
	}

	private class MyObserver extends ContentObserver
	{

		public MyObserver(Handler handler)
		{
			super(handler);
		}

		// 内容观察者观察到内容变化调用
		// 观察到消息邮箱有一条数据库内容变化的通知
		@Override
		public void onChange(boolean selfChange)
		{
			super.onChange(selfChange);
			SmsInfo sms=getLastSms();
			TextView tv=new TextView(MainActivity.this);
			tv.setText(sms.toString());
//			Toast.makeText(MainActivity.this, sms.toString(), Toast.LENGTH_LONG).show();
			layout.addView(tv);
		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	private SmsInfo getLastSms()
	{
		Uri uri = Uri.parse("content://sms/");
		ContentResolver resolver = getContentResolver();
		Cursor cursor = resolver.query(uri, new String[]
		{ "address", "date", "type", "body" }, null, null, null);
		cursor.moveToFirst();
		String address = cursor.getString(0);
		String date = cursor.getString(1);
		String type = cursor.getString(2);
		String body = cursor.getString(3);
		cursor.close();
		return new SmsInfo(address, type, date, body);
	}

}


如果想在自定义的逻辑里面添加通知,使用:

context.getContentResolver()
		.notifyChange(Uri.parse("content://com.pas.sqlite.personprovider"), null);

 

© 著作权归作者所有

共有 人打赏支持
维特的烦恼
粉丝 21
博文 97
码字总数 42329
作品 0
天津
私信 提问
内容观察者读取短信记录多次

刚学安卓,照着写了一个内容观察者监听短信,但是短信每次都会备份好几份,查看了安卓短信的字段也没有找出为什么

huskyc1
2018/04/23
100
1
自动提取短信验证码解决方案

主要功能及优点 1.收到验证码短信后,自动提取短信中的验证码填写到相应输入框 2.可指定一个号码,只读取与他有关短信,避免提取来源错误 3.利用正则表达式,可匹配各种类型验证码 模块集成关...

极分享社区
2016/03/12
236
3
内容观察者ContentObserver类详解

ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便...

骑牛找牛
2014/03/06
0
0
android广播和短信广播详解----使用广播接收者窃听短信

当系统收到短信时,会发出一个action名称为android.provier.Telephony.SMS_RECEIVED的广播Intent,该Intent存放了接收到的短信内容,使用名称 “pdus”即可从Intent中获取短信内容。 pdus是一...

程序袁_绪龙
2014/09/28
0
0
Android中内容观察者的使用---- ContentObserver类详解 (转)

前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了 ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对Conte...

娶到笨笨
2014/04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部