android黑科技之读取用户短信+插入短信到系统短信数据库
来源:互联网 发布:大数据 消费者洞察 编辑:程序博客网 时间:2024/05/08 03:14
安卓系统比起ios系统最大的缺点,相信大家都知道,就是系统安全问题。
读取用户短信
Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证码,一些app马上就能自动获取并填上验证码,省去我们手动填写验证码。原理就是通过Android的ContentProvider组件间接访问系统的短信数据库,获取所有短信内容。下面来演示一下。
布局很简单,如下:
代码如下:
public class MainActivity extends Activity {List<Message> smsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); smsList = new ArrayList<Message>(); } public void click(View v){ //访问内容提供者获取短信 ContentResolver cr = getContentResolver(); //短信内容提供者的主机名 Cursor cursor = cr.query(Uri.parse("content://sms"), new String[]{"address", "date", "body", "type"}, null, null, null); while(cursor.moveToNext()){ String address = cursor.getString(0); long date = cursor.getLong(1); String body = cursor.getString(2); String type = cursor.getString(3); Message sms = new Message(body, type, address, date); smsList.add(sms); Log.e("TAG", sms.toString()); } } public void click2(View v){ XmlSerializer xs = Xml.newSerializer(); File file = new File("sdcard/sms.xml"); FileOutputStream fos;try {fos = new FileOutputStream(file);xs.setOutput(fos, "utf-8");xs.startDocument("utf-8", true);xs.startTag(null, "message");for (Message sms : smsList) {xs.startTag(null, "sms");xs.startTag(null, "body");xs.text(sms.getBody());xs.endTag(null, "body");xs.startTag(null, "date");xs.text(sms.getDate() + "");xs.endTag(null, "date");xs.startTag(null, "type");xs.text(sms.getType());xs.endTag(null, "type");xs.startTag(null, "address");xs.text(sms.getAddress());xs.endTag(null, "address");xs.endTag(null, "sms");}xs.endTag(null, "message");xs.endDocument();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} } }
下面来分析一下代码:第一个按钮通过ContentProvider间接获取了一些短信的信息,保存在一个List数组下。我们先导出Android系统的sms表看一下:
总共有17个字段这么多,显然不是我们都关心的,这里只要了address,date, body, type四个字段,分别表示对方号码,短信时间,短信内容,发送还是接收。第二个按钮把短信相关信息存储在一个序列化的XML文件中,方便查看。
放上XML截图:
可以看出此时手机上共有5条短信,大功告成。
插入一条短信到sms数据库
下面示范一下用95533(建行)插入一条短信到sms数据库
代码如下:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ Thread t = new Thread(){ @Override public void run() { ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put("address", 95533); values.put("type", 1); values.put("date", System.currentTimeMillis()); values.put("body", "您尾号为9999的信用卡收到1,000,000RMB转账,请注意查收"); cr.insert(Uri.parse("content://sms"), values); } }; t.start(); } }
思路跟前一步差不多,不过这里是插入一条短信。实现效果
顺带一提,从Android5.0开始,默认短信应用外的软件不能以写入短信数据库的形式(write sms)发短信,也就是说插入短信到短信数据库方法行不通了,不过读取用户短信这个bug至今还没修复。
0 0
- android黑科技之读取用户短信+插入短信到系统短信数据库
- Android黑科技,读取用户短信+修改系统短信数据库
- [android]_[初级][插入短信数据到短信数据库]
- Android ContentProvider之读取和插入短信
- 插入一条记录到系统短信应用
- Android使用ContentObserver监听数据库变化,截取系统通知用户接收到短信
- android系统传播之短信
- Android编程之SMS读取短信并保存到SQLite
- Android假短信(发送短信到手机系统)
- android ContentObserver监听系统短信和备份短信到本地
- Android监听系统短信数据库变化-提取短信内容
- Android 插入一条短信
- Android将发送的短信插入数据库
- Android将发送的短信插入数据库
- Android将发送的短信插入数据库
- ContentResolver之短信读取
- android中读取短信
- Android: 读取短信
- virtualbox实现linux双网卡通信
- 虚拟机上ubuntu10.04上网设置
- C++小题(一)
- [Android][Fatal Exception] android.content.res.Resources$NotFoundException 问题及解决方法
- UIButton的基本用法
- android黑科技之读取用户短信+插入短信到系统短信数据库
- STM32之用SysTick做准确定时
- 用 _findfirst 和 _findnext 查找文件(转)
- 内核杂记
- java性能优化读书笔记之三《程序优化===集合优化(list)》
- Audio Jack 的耳机检测和按键检测
- Java线程池学习笔记一
- Upgrade Python And Pip On CentOS 6.x
- Python: 冒泡排序