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加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取 ...
随机推荐
- java IO流 内容整理
在java中,对数据的输入和输出操作以流的方式进行.(注:对文件的操作用io.File类,但不能对文件中的内容进行操作) 一.IO流的分类: 按数据流的方向不同,可以分为输入流和输出流: 按处理数据的 ...
- [Python3网络爬虫开发实战] 3.1-使用urllib
在Python 2中,有urllib和urllib2两个库来实现请求的发送.而在Python 3中,已经不存在urllib2这个库了,统一为urllib,其官方文档链接为:https://docs.p ...
- 安装Vmware Tools出现错误
安装Vmware Tools出现: Before you can compile modules, you need to have the following installed... makegc ...
- 树莓派--bcm2835 library (2) 交叉编译BCM2835
在上文中,按照guide, 在树莓派目标板上install bcm2835. 因为bcm2835是用户空间应用,所以可以在宿主机上交叉编译,生成binary后在树莓派执行 按照guide: Insta ...
- drupal8 用户指南
一句话概括 - 官方文档 概念- Drupal是个内容管理系统哦 那么,什么是内容管理系统? 就是用户自己编辑自己的网站内容的一个系统. 那么,什么是Drupal呢? Drupal是一个通过模块和主题 ...
- PyQt5+requests实现车票查询工具
PyQt5+requests实现一个车票查询工具,供大家参考,具体内容如下 结构图 效果图 思路 1.search(QPushButton)点击信号(clicked)连接到自定义的槽函数(ev ...
- $(document).ready() 与$(window).load()
虽说很早就开始接触JavaScript,自己也用JavaScript编写过许多代码,如之前的web版码表计时器,就写了近500行代码,函数也写了10个左右.当时也就是想到哪里就写到哪里,行不通就另外找 ...
- java连接MySQL数据库并读取内容
package sqldemo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe ...
- CentOS 7.1安装GNOME,开启VNC Server
版权声明:本文为博主原创文章,未经博主允许不得转载. A.准备: 1.安装GNOME Desktop yum groupinstall 'GNOME Desktop' 2.确认GNOME Deskto ...
- ORACLE ASH/AWR
(一) ASH 用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图,DBA可以查看用户实际执行的操作,或者当 ...