android 添加手机短信,获取手机短信,删除手机短信和修改手机短信
注意添加权限:
<uses-permission android:name="android.permission.READ_SMS"></uses-permission> <uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
代码如下:
//更新短信 private void UpdateSMS() { /* update支持的协议有很多: SMS_RAW_MESSAGE SMS_STATUS_PENDING SMS_ALL SMS_FAILED SMS_QUEUED SMS_INBOX SMS_SENT SMS_DRAFT SMS_OUTBOX SMS_CONVERSATIONS SMS_ALL_ID SMS_INBOX_ID SMS_FAILED_ID SMS_SENT_ID SMS_DRAFT_ID SMS_OUTBOX_ID SMS_CONVERSATIONS_ID SMS_STATUS_ID */ ContentValues cv = new ContentValues(); cv.put("thread_id", "2"); cv.put("address", "00000"); cv.put("person", "11"); //cv.put("date", "11111111"); cv.put("body", "hello,modify content333333333"); getContentResolver().update(Uri.parse("content://sms/sent/3"), cv, null,null); //getContentResolver().update(Uri.parse("content://sms/sent/3"), cv, "id=?",new String[]{"3"}); } //删除短信 private void DeleteSMS() { /* * 其中,delete方法中支持的协议为: * SMS_ALL 根据参数中的条件删除sms表数据 * SMS_ALL_ID 根据_id删除sms表数据 * SMS_CONVERSATIONS_ID 根据thread_id删除sms表数据,可以带其它条件 * SMS_RAW_MESSAGE 根据参数中的条件删除 raw表 * SMS_STATUS_PENDING 根据参数中的条件删除 sr_pending表 * SMS_SIM 从Sim卡上删除数据 * 试一下SMS_CONVERSATIONS_ID:"content://sms/conversations/3 ",删除thread_id="3", _id="5"的数据 在eclipse中的Emulator * Control中,以13800给模拟器发送三条数据,然后以13900发送一条 * this.getContentResolver().delete * (Uri.parse("content://sms/conversations/3"), "_id=?", new * String[]{"5"}); 成功删除一条数据。 * 在数据库中每个发送者的thread_id虽然一样,但不是固定的,如果把一个发送者的全部数据删除掉, * 然后换一个新号码发送短信时,thread_id是以数据库中最大的id+1赋值的。 */ /* 看了一下android的源代码,sms支持的协议有: sURLMatcher.addURI("sms", null, SMS_ALL); sURLMatcher.addURI("sms", "#", SMS_ALL_ID); sURLMatcher.addURI("sms", "inbox", SMS_INBOX); sURLMatcher.addURI("sms", "inbox/#", SMS_INBOX_ID); sURLMatcher.addURI("sms", "sent", SMS_SENT); sURLMatcher.addURI("sms", "sent/#", SMS_SENT_ID); sURLMatcher.addURI("sms", "draft", SMS_DRAFT); sURLMatcher.addURI("sms", "draft/#", SMS_DRAFT_ID); sURLMatcher.addURI("sms", "outbox", SMS_OUTBOX); sURLMatcher.addURI("sms", "outbox/#", SMS_OUTBOX_ID); sURLMatcher.addURI("sms", "undelivered", SMS_UNDELIVERED); sURLMatcher.addURI("sms", "failed", SMS_FAILED); sURLMatcher.addURI("sms", "failed/#", SMS_FAILED_ID); sURLMatcher.addURI("sms", "queued", SMS_QUEUED); sURLMatcher.addURI("sms", "conversations", SMS_CONVERSATIONS); sURLMatcher.addURI("sms", "conversations/*", SMS_CONVERSATIONS_ID); sURLMatcher.addURI("sms", "raw", SMS_RAW_MESSAGE); sURLMatcher.addURI("sms", "attachments", SMS_ATTACHMENT); sURLMatcher.addURI("sms", "attachments/#", SMS_ATTACHMENT_ID); sURLMatcher.addURI("sms", "threadID", SMS_NEW_THREAD_ID); sURLMatcher.addURI("sms", "threadID/*", SMS_QUERY_THREAD_ID); sURLMatcher.addURI("sms", "status/#", SMS_STATUS_ID); sURLMatcher.addURI("sms", "sr_pending", SMS_STATUS_PENDING); sURLMatcher.addURI("sms", "sim", SMS_ALL_SIM); sURLMatcher.addURI("sms", "sim/#", SMS_SIM);*/ //getContentResolver().delete(Uri.parse("content://sms/failed/3"), "_id=?", new String[]{"99"}); getContentResolver().delete(Uri.parse("content://sms/#"),"_id=?", new String[]{"99"}); } //添加短信 private void AddSMS() { /* * insert支持的协议: * * SMS_ALL * SMS_INBOX * SMS_FAILED * SMS_QUEUED * SMS_SENT * SMS_DRAFT * SMS_OUTBOX * SMS_RAW_MESSAGE * SMS_STATUS_PENDING * SMS_ATTACHMENT * SMS_NEW_THREAD_ID * * 向sms表插入数据时,type是根据协议来自动设置, * 如果传入的数据中没有设置date时,自动设置为当前系统时间;非SMS_INBOX协议时,read标志设置为1 * SMS_INBOX协议时,系统会自动查询并设置PERSON threadId为null或者0时,系统也会自动设置 * * 一直为造不了"发送失败"的邮件而发愁,现在来做一个: content://sms/failed */ String id=null; ContentValues cv = new ContentValues(); for(int i = 0;i<5;i++) { id.valueOf(i); cv.put("_id", id); cv.put("thread_id", "0"); cv.put("address", "9999"); cv.put("person", "888"); //cv.put("date", "9999"); cv.put("protocol", "0"); cv.put("read", "1"); cv.put("status", "-1"); cv.put("body", "@@@@@@@@@"); getContentResolver().insert(Uri.parse("content://sms/sent"), cv); cv.clear(); } } //查询短信内容 private void GetSMS() { /* * content://sms/inbox 收件箱 content://sms/sent 已发送 * content://sms/draft 草稿 content://sms/outbox 发件箱 * content://sms/failed 发送失败 content://sms/queued 待发送列表 * 数据库中sms相关的字段如下: * _id 一个自增字段,从1开始 thread_id 序号,同一发信人的id相同 * 同一个联系人的thread_id是一样的,通过遍历thread id和对比就能知道一个联系人有几条短信; * 当然了,Threads表里面有个message_out的字段也是显示有条联系人的,但是Threads表还没有找到可以读取的办法; * * address 发件人手机号码 * person 联系人列表里的序号,陌生人为null ;即rawcontact表的contact_id,或者contact表的_id; * 可通过此id关联联系人;但是person对应结果不稳定,应该使用PhoneLookup.CONTENT_FILTER_URI * date 发件日期 * protocol 协议,分为: 0 SMS_RPOTO, 1 MMS_PROTO * read 是否阅读 0未读, 1已读 * status 状态 -1接收,0 complete, 64 pending, 128 failed * type ALL = 0; INBOX = 1; SENT =2; DRAFT = 3; OUTBOX = 4; FAILED = 5; QUEUED = 6; * body 短信内容 * service_center 短信服务中心号码编号 * subject 短信的主题 * reply_path_present TP-Reply-Path locked */ Log.i("SMS","开始获取短信"); String[] projection = new String[] { "_id", "address", "person", "date", "protocol", "read", "status", "body", "service_center", "subject" }; Cursor cur = getContentResolver().query(Uri.parse("content://sms"), projection, null,null, "date desc"); StringBuilder str=new StringBuilder(); if (cur.moveToFirst()) { String name; String phoneNumber; String sms; long date; String id; int idColumn = cur.getColumnIndex("_id"); int nameColumn = cur.getColumnIndex("person"); int phoneColumn = cur.getColumnIndex("address"); int smsColumn = cur.getColumnIndex("body"); int dateColumn=cur.getColumnIndex("date"); do { // Get the field values name = cur.getString(nameColumn); phoneNumber = cur.getString(phoneColumn); sms = cur.getString(smsColumn); date = cur.getLong(dateColumn); String temp = long2String(date); id = cur.getString(idColumn); //date = String2Long(date); str.append("{"); str.append(name+","); str.append(phoneNumber+","); str.append(sms+","); str.append(temp+","); str.append(id); str.append("}"); if (null==sms) sms=""; } while (cur.moveToNext()); } else { str.append("no result!"); } Log.i("SMS",str.toString()); Toast.makeText(context, str.toString(), Toast.LENGTH_SHORT).show(); System.out.print("短信结果:"+str.toString()); cur.close(); } private String long2String(long time) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss:SSSS"); return sdf.format(new Date(time)); }
android 添加手机短信,获取手机短信,删除手机短信和修改手机短信的更多相关文章
- 腾讯云短信 nodejs 接入, 通过验证码修改手机示例
腾讯云短信 nodejs 接入, 通过验证码修改手机示例 参考:腾讯云短信文档国内短信快速入门qcloudsms Node.js SDK文档中心>短信>错误码 nodejs sdk 使用示 ...
- Android黑科技,读取用户短信+修改系统短信数据库
安卓系统比起ios系统最大的缺点,相信大家都知道,就是系统安全问题.这篇博客就秀一波“黑科技”. 读取用户短信 Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证 ...
- Android添加快捷方式(Shortcut)到手机桌面
Android添加快捷方式(Short)到手机桌面 权限 要在手机桌面上添加快捷方式,首先需要在manifest中添加权限. <!-- 添加快捷方式 --> <uses-permis ...
- 调用手机在线API获取手机号码归属地信息
手机在线(www.showji.com)始创于2001年,发展至今已拥有国内最准确.号段容量最大的手机号码归属地数据库系统, 目前号段容量将近33万条,每月保持两次以上规模数据更新,合作伙伴包括:百度 ...
- android利用adb修改手机的分辨率和dpi
在android开发过程中,适配更多的适配是必不可少的一步,而每次测试适配时,要么购买设配,要么模拟器,买设配太花钱,模拟器太占内存,不过幸好还可以通过修改手机的size(分辨率)和density来进 ...
- Android设备唯一码的获取
Android设备唯一码的获取 UTDID是集团无线设备统一ID方案,目的是给每一台设备一个ID,作为唯一标识.UTDID由客户端生成,并在设备中各个客户端之间共享.UTDID的生成中包含时间戳和随机 ...
- android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)
Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 老版本 链接:https://www.cnblogs. ...
- 【Android Demo】通过WebService获取今日天气情况
因为本身是在搞.NET方面的东东,现在在学习Android,所以想实现Android通过WebService接口来获取数据,网上很多例子还有有问题的.参考:Android 通过WebService进行 ...
- 【Android Demo】通过WebService获取今日天气情况--转
因为本身是在搞.NET方面的东东,现在在学习Android,所以想实现Android通过WebService接口来获取数据,网上很多例子还有有问题的.参考:Android 通过WebService进行 ...
- Android必知必会-获取视频文件的截图、缩略图
背景 公司最近要求给我负责的APP加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取 ...
随机推荐
- 1 SQL 数据库和SQL
1 数据库和SQL 1-1 数据库是什么 将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database, DB). 法则 用来管理数据库的计算机系统称为数据库管理系统 ...
- Mongo索引学习笔记
索引使用场景 优:加快查询速度 劣:增删改会产生额外的开销.占用空间 tips: 返回集合中一半以上的数据,全表扫描的效率高 索引基础 基础操作 查看索引:db.test.getIndexes() 创 ...
- Win2008 Server搭建FTP服务器
首先创建一个专门的FTP用户,当然也可以不创建. 用系统自带的超管用户. 设置用户名和密码.用户下次登陆必须修改密码记得去掉勾选. 在角色里面的WEB服务器找到添加角色服务.我之前有安装IIS. 没有 ...
- python 通过句柄获取窗口内容
-- enoding:utf-8 -- 生成 buffer 对象 import win32con from win32gui import PyMakeBuffer, SendMessage, PyG ...
- day21 03 异常处理
day21 03 异常处理 1.什么是异常 异常:程序运行时发生错误的信号 错误:语法错误(一般是不能处理的异常) 逻辑错误(可处理的异常) 特点:程序一旦发生错误,就从错误的位置停下来,不再继续执行 ...
- 本地==〉Github(push)
[概述] Git中的项目是本地的,为了可以协同工作.需要将项目推送到GitHub服务器上. [步骤] 1) 第一步:创建项目 2) 第二步:在github上创建一个同名的空项目 ①选择Your rep ...
- 关于Windows 10 初始安装的VS2013 SSDT-BI 的BUG 问题
初始安装,正常安装会出现以下出现信息,随后会被告知未安装成功. 关于SSDT-BI信息可以参见这里 http://jimshu.blog.51cto.com/3171847/1420469 从Wind ...
- BNUOJ 26283 The Ghost Blows Light
The Ghost Blows Light Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. O ...
- Windows Server 2012 防火墙如何添加端口例外的方法(转)
Windows Server 2012 防火墙如何添加端口例外的方法 Windows Server 2012 防火墙如何添加端口例外的方法 在Windows Server 2012系统中,如果用户想在 ...
- Oracle导出txt文本文件
转自: http://blog.csdn.net/ahngzw77/article/details/8652722 对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: ...