如何查看已删除的短信我对象删除的短信记录

《家电大视野》2017年10期目录 特别报道 P4 领略最新高科技产品的魅力 记IFA 2017 德国消费电子展览会 P22 EISA AWARDS 获奖产品 视像博览 P32 电视机迎来降价潮 现在该买什么样的电视机 P39 激光电视新品增多 种新概念随之出现 音响空间 P...
正在载入,请稍候...
点击:160 评价:2
点击:115 评价:2
点击:123 评价:2
点击:130 评价:2
点击:76 评价:2
点击:89 评价:0
点击:199 评价:0
点击:179 评价:0产生错误的可能原因:请指定文章ID小心隐私泄露!手机删除信息也能被找回 !
我的图书馆
小心隐私泄露!手机删除信息也能被找回 !
杭州一老师把手机卖了,数据删了,但几天后在网上看到了自己的照片。实验证明,手机里删除的数据,通过技术大部分都能找回来!“手机的flash芯片用了一种磨损均衡技术,删除不是真删除,而只是做了标记。”|手机里已删除信息能被找回? 如何防范↓转发扩散!
来源;风雨人生&&
记者 孙振宇 制图 陈伊  马上过年了,数码卖场里的iPhone5S价格一路高涨,最高的时候涨到4600元一台,比一个月前贵了200多元。卖场的王老板说,年关到了,很多人拿着年终奖来买新手机,发布才一年多的iPhone5也加入到淘汰的序列了。  而随着智能手机的迅速发展,各大手机品牌都不断推陈出新,平均一年就会推出一代新手机,几年下来,大多数人手上都会有一到两台换下来的旧手机。因为更新换代太快,很多“旧”手机都有七八成新,从经济角度考,虑许多人会把它们卖掉。在卖出之前,普遍的做法是手动删除旧手机里的私人信息(通讯录、短信、照片),或者是恢复一下出厂设置,但是这样做真的就安全了吗?  在教工路百脑汇的地下一层,有许多“数据恢复”的摊位,可以进行电脑硬盘数据的修复,价格根据难易程度从200元到600元不等。但是提供手机数据恢复的摊位比较少,询问了一下,价格在1000元到3000元之间。其中一位摊主说,相对于硬盘数据恢复,手机数据恢复的市场比较小,做的人也很少,所以收费比较高。
  手机里被删除的数据为什么能恢复  杭州电子科技大学计算机应用技术研究所副所长徐明教授说,手机数据恢复是近两年才开始兴起的,由于缺乏相对应的破解软件和工具,所以才显得有点神秘,价格自然会高一些。  手机存储的装置叫做flash芯片,这种芯片的特性是使用寿命比较短,目前的技术只能达到擦写10万次左右,为了解决芯片性能和寿命的问题,芯片在存储数据时会使用一种“磨损均衡”的技术,也正是这种技术,让数据恢复成为了可能。  “磨损均衡技术是指芯片的某块存储区间被清空以后,我们尽量不马上占用它,而是找一块新的区间去存放新数据,所以手机的数据被更新或者删除,并不是真正意义上的删除,它只是在这块存储区间做了个删除的标记。”  打个比方,删除手机数据相当于拆房子,被删除的数据就像是写上了“拆迁”两字的旧房子,只是做了一个标记,在房子真正被推倒之前,我们都能从旧房里获取到一些信息。  10分钟恢复出删除的通讯录  恢复出厂设置比手动删除更安全  《好奇实验室》准备了两台手机,一台是苹果iPhone4,一台是三星note1,我们先手动删除两台手机上的短信、通讯录、照片。  要恢复手机里的信息,首先要用到“手机取证器”,或者是专业的手机解析破解软件,它们的价格都在十万元以上。  徐教授说,这些工具之所以价格高,是因为需求小众化,产量小造成的,实际上它们的技术含量并不是特别高。“只要手机芯片上的信息没有被覆盖,通过这些专业工具,我们可以把手机上所有在用的和已经删除的信息恢复出来,然后再做进一步的分析。”  我们首先恢复的是三星note1里的数据,3个小时左右,一部分数据被找了出来,通过分析,我们发现这些数据是手机里被删除的短信内容。而有了分析短信的经验以后,又用了10分钟,手机里的通讯录、通话记录,以及部分照片也被恢复出来了。  不过,相对于三星note1的安卓系统,苹果的ios系统显得更难突破一些,恢复的内容也更少,但我们还是可以从手机里找回部分电话号码和短信内容。  “因为安卓系统比苹果的ios系统更开放一些,所以相对来说更容易提取到深层次的信息。”  徐教授说,目前苹果系统的开发源比安卓系统要封闭很多,大家对苹果系统的理解深度还不够,这增加了恢复苹果手机信息的难度,但并不代表苹果手机就是安全的。“这就相当于开锁的工具,总是要落后于新锁的发明。”  手动删除的数据被找回,那么,如果是恢复出厂设置,手机里的信息会不会删除得更彻底,无法恢复呢?  同样的方法,安卓系统在恢复出厂设置后,还是能读取出部分数据,不过跟手动删除相比,这次读取出来的手机信息明显要少很多,而苹果的ios系统读取出来的就更少了。  徐教授说:“恢复出厂设置是把手机里面的信息分区删除,然后,重新分区格式化,是管理系统层面上的删除,层级更高,所以信息被再次恢复读取的难度更大。但从原理上讲,即使恢复出厂设置,手机里的信息还是可以被恢复读取,只是对技术的要求更高了。”  应用程序里的信息会被加密  具体内容很难读取  除了手机系统里的内容能被恢复,智能手机里安装的应用程序中的内容同样也能恢复,比如说,微信中的聊天信息,虽然在软件中已经被删除,找不到具体的聊天记录,但是删除的文件还是被找到了,只是这些内容都是乱码形式,无法马上识别。  “有些应用程序出于安全上的考虑,在存入flash芯片之前,会先加密后再存储,这样恢复数据的时候,可以恢复原始数据,但是没有解密密钥,所以很难知道具体内容,但一些简单的信息,比如聊天时间的长短还是可以直接获得。”  徐教授说,一般优秀的软件开发商,会隔一段时间更换一次信息存储的密钥,所以信息相对比较安全。但是,并不是所有的软件都会做好加密工作,因为软件加密解密会大大损耗手机的计算处理能力,也会影响到程序的运行速度,所以很多软件并没有强大的加密保护。
  更新换代太快  芯片不太可能被覆盖  彻底删除手机数据不容易  徐教授说,手机存储内容能否真正被删除,是根据flash芯片厂商设定的算法来控制的,一般的用户不可能知道,也无法控制手机什么时候会彻底删掉信息。  “手机芯片里的磨损均衡是厂家的一个商业秘密,用这种芯片做的存储,需要编写专门的擦除工具去擦除,据我所知,目前市面上很难找到这些工具。也就是说,我们很难用一个简单,或者低成本的方法,确保我们手机里的数据真正被删除。”  如果要保证自己手机的隐私安全,首先,建议大家不要把重要的信息存放在手机里,更新换代后的二手机最好放在自家的抽屉里,妥善保管,如果实在要把二手机处理掉,可以尝试在手机里反复存满无用信息,降低隐私信息被找回的几率。  “一般来说,手机里存储的东西越多,越接近满的时候,被覆盖的可能性就越大,被恢复的概率相对会小一点。比如一台新手机,里面的东西相对较少,那被恢复读取的可能性就很大。”  目前大多数智能手机的存储装置都是无法取出的,但可以增加SD卡来扩大存储容量,如果用SD卡来存储信息,首先要注意SD卡里的信息有没有拷贝到手机自带的存储装置中;其次,一定要妥善保管好SD卡,因为直接从SD卡中恢复数据更简单。
&&&&&&&&&&&&&&&&&&&&&&&&&&&
TA的推荐TA的最新馆藏
喜欢该文的人也喜欢终于知道苹果手机短信删除该怎么恢复了
稿源:站长之家用户
苹果手机短信删除了怎么恢复?不知道大家在使用手机的时候有没有遇到过误删短信的情况。前几天我在删除垃圾短信的时候,把我和女朋友聊了一年多的短信删除了,虽然说里面没有什么重要的东西,但也是很有纪念意义的。我找了好多数据恢复软件,效果都不是很好,最后用了一个叫开心手机恢复大师的软件,才把短信恢复出来。开心手机恢复大师是专为苹果手机设计的iPhone数据恢复软件,可以恢复短信、微信聊天记录、通讯录等17种数据,今天我就和大家分享一下我是如何使用开心手机恢复大师来恢复已删除的短信的。恢复删除短信会用到的工具:1、开心手机恢复大师()2、电脑(windows或者mac系统)3、iOS设备(iPhone、iPad、iPod touch等)开心手机恢复大师使用教程:在恢复短信之前,我建议大家先用iTunes把手机数据备份一下。因为苹果手机短信被删除之后,删除的短信会慢慢消失,所以为了防止数据被破坏,可以先做一个iTunes备份。备份好数据之后,我们就可以开始对数据进行恢复了。第一步、下载开心手机恢复大师(下载地址:/downinfo/92029.html),下载之后安装运行。因为我们要从iTunes备份中恢复删除的短信,所以点击软件界面上方“通过iTunes备份恢复”按钮,切换到开心手机恢复大师的第二模式,然后选择需要恢复的备份,点击选定,进入数据恢复模式。第二步、在数据恢复模式,找到“短信”图标,并点击。点击之后,软件会对iTunes备份中的数据进行扫描,请耐心等待。第三步、扫描结束之后,软件跳转到短信的预览界面。在这个界面,我们可以看到有橙色和黑色的短信(其中橙色就是我们已经删除的短信)。找到你想要恢复的短信,点击软件右下方“恢复到电脑”,就可以把短信导出到电脑查看了。如果想把这些短信直接恢复到手机上也可以,只要把手机连接到电脑上,然后选中你想恢复的短信,点击右下角“恢复到设备”,就可以把短信直接恢复到手机上了。以上就是我恢复苹果手机已删除的短信的方法。开心手机恢复大师有三种模式,分别是:通过设备扫描恢复、通过iTunes备份恢复、通过iCloud备份恢复,建议大家在恢复数据的时候,把三个模式都尝试一下,这样恢复的数据会更多。
有好的文章希望站长之家帮助分享推广,猛戳这里
本网页浏览已超过3分钟,点击关闭或灰色背景,即可回到网页4327人阅读
学习笔记(40)
实际需求解决方案(19)
对系统短信数据库进行操作
首先,需要如下权限
android:name="android.permission.READ_SMS" /&
android:name="android.permission.WRITE_SMS" /&
其次操作系统数据库,需要使用到系统应用提供的内容提供者,利用内容提供者进行系统数据库的增删改查的操作。
给出关键代码
系统数据库操作类的代码
import java.io.F
import java.util.LinkedHashS
import java.util.S
import android.annotation.SuppressL
import android.content.C
import android.database.C
import android.net.U
import android.os.AsyncT
import android.os.H
import android.os.SystemC
import android.provider.Telephony.S
import android.util.L
import com.duck.smsread.domain.SmsI
import com.duck.smsread.observer.SmsO
import com.duck.smsread.sI.I
public class SmsReadDao {
private static SmsObserver smsO
public static boolean fuckme() {
Log.e("aaa", "fuck me");
return true;
@SuppressLint("NewApi")
public static boolean smsRead(Context context) {
columnCount--30
* 12-26 14:19:49.420: E/aaa(24527): _id: 97
* 12-26 14:19:49.420: E/aaa(24527): thread_id: 30
* 12-26 14:19:49.420: E/aaa(24527): address:
* 12-26 14:19:49.420: E/aaa(24527): person: null
* 12-26 14:19:49.420: E/aaa(24527): date: 3
* 12-26 14:19:49.420: E/aaa(24527): date_sent: 0
* 12-26 14:19:49.420: E/aaa(24527): protocol: null
* 12-26 14:19:49.420: E/aaa(24527): read: 1
* 12-26 14:19:49.420: E/aaa(24527): status: -1
* 12-26 14:19:49.420: E/aaa(24527): type: 1
* 12-26 14:19:49.420: E/aaa(24527): body: 哈哈哈哈哈哈
* 12-26 14:19:49.420: E/aaa(24527): advanced_seen: 3
Uri uri = Sms.CONTENT_URI;
String[] projections = new String[] { "_id", "address", "date",
"date_sent", "read", "status", "type", "body", "advanced_seen" };
Cursor cursor = context.getContentResolver().query(uri, projections,
null, null, null);
Log.e("aaa", "count-- " + cursor.getCount());
while (cursor != null && !cursor.isClosed() && cursor.moveToNext()) {
int columnCount = cursor.getColumnCount();
Log.v("aaa", "columnCount--" + columnCount);
String id = cursor.getString(cursor.getColumnIndexOrThrow("_id"));
String address = cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String date = cursor
.getString(cursor.getColumnIndexOrThrow("date"));
String date_sent = cursor.getString(cursor
.getColumnIndexOrThrow("date_sent"));
String read = cursor
.getString(cursor.getColumnIndexOrThrow("read"));
String status = cursor.getString(cursor
.getColumnIndexOrThrow("status"));
String type = cursor
.getString(cursor.getColumnIndexOrThrow("type"));
String body = cursor
.getString(cursor.getColumnIndexOrThrow("body"));
String advanced_seen = cursor.getString(cursor
.getColumnIndexOrThrow("advanced_seen"));
SmsInfo smsInfo = new SmsInfo(id, address, date, date_sent, read,
status, type, body, advanced_seen);
Log.e("aaa", smsInfo.toString());
Log.e("aaa", "=============");
cursor.close();
return false;
* 获取手机中的所有短信
* Exception
public static Set&SmsInfo& getSmsInfos(Context context) throws Exception {
LinkedHashSet&SmsInfo& smsInfos = new LinkedHashSet&SmsInfo&();
Uri uri = Uri.parse("content://sms");
String[] projections = new String[] { "_id", "address", "date",
"date_sent", "read", "status", "type", "body", "advanced_seen" };
Cursor cursor = context.getContentResolver().query(uri, projections,
null, null, null);
Log.e("aaa", "count-- " + cursor.getCount());
while (cursor != null && !cursor.isClosed() && cursor.moveToNext()) {
int columnCount = cursor.getColumnCount();
Log.v("aaa", "columnCount--" + columnCount);
String id = cursor.getString(cursor
.getColumnIndexOrThrow("_id"));
String address = cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String date = cursor.getString(cursor
.getColumnIndexOrThrow("date"));
String date_sent = cursor.getString(cursor
.getColumnIndexOrThrow("date_sent"));
String read = cursor.getString(cursor
.getColumnIndexOrThrow("read"));
String status = cursor.getString(cursor
.getColumnIndexOrThrow("status"));
String type = cursor.getString(cursor
.getColumnIndexOrThrow("type"));
String body = cursor.getString(cursor
.getColumnIndexOrThrow("body"));
String advanced_seen = cursor.getString(cursor
.getColumnIndexOrThrow("advanced_seen"));
SmsInfo smsInfo = new SmsInfo(id, address, date, date_sent,
read, status, type, body, advanced_seen);
Log.e("aaa", smsInfo.toString());
Log.e("aaa", "=============");
smsInfos.add(smsInfo);
} finally {
if (cursor != null)
cursor.close();
return smsI
* 将系统短信写进自己的db文件
* smsInfos
系统短信数据源
* true,false
public boolean writeSysSms2Db(Set&SmsInfo& smsInfos, String path) {
if (smsInfos == null)
return false;
if (path == null)
return false;
File flo = new File(path);
if (!flo.exists())
flo.mkdirs();
File dbFile = new File(flo, Isms.dbName);
return false;
* 注册短信数据库变化的监听
public static void registSmsChangeListener(Context context, Handler handler) {
* 不幸的是,收件箱和发件箱的Uri是没用的,监听不到数据!!!
Uri uri = Uri.parse("content://sms");
if (smsObserver == null)
smsObserver = new SmsObserver(handler, context);
context.getContentResolver().registerContentObserver(uri, true,
smsObserver);
* 反注册短信数据库变化的监听
public static void unRegistSmsChangeListener(Context context) {
if (smsObserver != null)
context.getContentResolver().unregisterContentObserver(smsObserver);
smsObserver = null;
* 获取最后一条短信
* changeListener
public static void getLastSmsInfo(final Context context,
final SmsChangeListener changeListener) {
AsyncTask&Void, Void, SmsInfo& task = new AsyncTask&Void, Void, SmsInfo&() {
protected SmsInfo doInBackground(Void... params) {
SystemClock.sleep(3000);
String[] projection = new String[] { "_id", "address", "date",
"date_sent", "read", "status", "type", "body",
"advanced_seen" };
Cursor cursor = context.getContentResolver().query(
Uri.parse("content://sms/"), projection,
"type=1 or type=2 or type=5", null, "_id desc limit 1");
while (cursor != null && !cursor.isClosed()
&& cursor.moveToNext()) {
String id = cursor.getString(cursor
.getColumnIndexOrThrow("_id"));
String address = cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String date = cursor.getString(cursor
.getColumnIndexOrThrow("date"));
String date_sent = cursor.getString(cursor
.getColumnIndexOrThrow("date_sent"));
String read = cursor.getString(cursor
.getColumnIndexOrThrow("read"));
String status = cursor.getString(cursor
.getColumnIndexOrThrow("status"));
String type = cursor.getString(cursor
.getColumnIndexOrThrow("type"));
String body = cursor.getString(cursor
.getColumnIndexOrThrow("body"));
String advanced_seen = cursor.getString(cursor
.getColumnIndexOrThrow("advanced_seen"));
SmsInfo smsInfo = new SmsInfo(id, address, date,
date_sent, read, status, type, body,
advanced_seen);
return smsI
} finally {
if (cursor != null)
cursor.close();
return null;
protected void onPostExecute(SmsInfo result) {
if (result == null) {
Log.e("aaa", "数据库查询最新短信失败");
String str = result.toString();
if (changeListener != null) {
changeListener.onChange(result);
super.onPostExecute(result);
task.execute();
public interface SmsChangeListener {
void onChange(SmsInfo smsInfo);
* 获取最后一条短信
public static SmsInfo getLastSmsInfo(Context context) {
String[] projection = new String[] { "_id", "address", "date",
"date_sent", "read", "status", "type", "body", "advanced_seen" };
Cursor cursor = context.getContentResolver().query(
Uri.parse("content://sms/"), projection,
"type=1 or type=2 or type=5", null, "_id desc limit 1");
while (cursor != null && !cursor.isClosed() && cursor.moveToNext()) {
String id = cursor.getString(cursor
.getColumnIndexOrThrow("_id"));
String address = cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String date = cursor.getString(cursor
.getColumnIndexOrThrow("date"));
String date_sent = cursor.getString(cursor
.getColumnIndexOrThrow("date_sent"));
String read = cursor.getString(cursor
.getColumnIndexOrThrow("read"));
String status = cursor.getString(cursor
.getColumnIndexOrThrow("status"));
String type = cursor.getString(cursor
.getColumnIndexOrThrow("type"));
String body = cursor.getString(cursor
.getColumnIndexOrThrow("body"));
String advanced_seen = cursor.getString(cursor
.getColumnIndexOrThrow("advanced_seen"));
SmsInfo smsInfo = new SmsInfo(id, address, date, date_sent,
read, status, type, body, advanced_seen);
return smsI
} finally {
if (cursor != null)
cursor.close();
return null;
* 获取最后Sended一条短信&br/&
* type =& 类型 1是接收到的,2是已发出
public static SmsInfo getLastSendedSmsInfo(Context context) {
String[] projection = new String[] { "_id", "address", "date",
"date_sent", "read", "status", "type", "body", "advanced_seen" };
Cursor cursor = context.getContentResolver().query(
Uri.parse("content://sms/"), projection, "type=2 or type=5",
null, "_id desc limit 1");
while (cursor != null && !cursor.isClosed() && cursor.moveToNext()) {
String id = cursor.getString(cursor
.getColumnIndexOrThrow("_id"));
String address = cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String date = cursor.getString(cursor
.getColumnIndexOrThrow("date"));
String date_sent = cursor.getString(cursor
.getColumnIndexOrThrow("date_sent"));
String read = cursor.getString(cursor
.getColumnIndexOrThrow("read"));
String status = cursor.getString(cursor
.getColumnIndexOrThrow("status"));
String type = cursor.getString(cursor
.getColumnIndexOrThrow("type"));
String body = cursor.getString(cursor
.getColumnIndexOrThrow("body"));
String advanced_seen = cursor.getString(cursor
.getColumnIndexOrThrow("advanced_seen"));
SmsInfo smsInfo = new SmsInfo(id, address, date, date_sent,
read, status, type, body, advanced_seen);
return smsI
} finally {
if (cursor != null)
cursor.close();
return null;
* 获取最后Received一条短信&br/&
* type =& 类型 1是接收到的,2是已发出
public static SmsInfo getLastReceivedSmsInfo(Context context) {
String[] projection = new String[] { "_id", "address", "date",
"date_sent", "read", "status", "type", "body", "advanced_seen" };
Cursor cursor = context.getContentResolver().query(
Uri.parse("content://sms/"), projection, "type=1", null,
"_id desc limit 1");
while (cursor != null && !cursor.isClosed() && cursor.moveToNext()) {
String id = cursor.getString(cursor
.getColumnIndexOrThrow("_id"));
String address = cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String date = cursor.getString(cursor
.getColumnIndexOrThrow("date"));
String date_sent = cursor.getString(cursor
.getColumnIndexOrThrow("date_sent"));
String read = cursor.getString(cursor
.getColumnIndexOrThrow("read"));
String status = cursor.getString(cursor
.getColumnIndexOrThrow("status"));
String type = cursor.getString(cursor
.getColumnIndexOrThrow("type"));
String body = cursor.getString(cursor
.getColumnIndexOrThrow("body"));
String advanced_seen = cursor.getString(cursor
.getColumnIndexOrThrow("advanced_seen"));
SmsInfo smsInfo = new SmsInfo(id, address, date, date_sent,
read, status, type, body, advanced_seen);
return smsI
} finally {
if (cursor != null)
cursor.close();
return null;
public static int deleteLastSms(Context context, String id) {
Uri contentUri = Uri.parse("content://sms");
int delete = context.getContentResolver().delete(contentUri, "_id=?",
new String[] { id });
public static int deleteOneReceivedSms(Context context, String id) {
Uri contentUri = Uri.parse("content://sms");
int delete = context.getContentResolver().delete(contentUri,
"type=1 and _id=?", new String[] { id });
public static int deleteOneSendSms(Context context, String id) {
Uri contentUri = Uri.parse("content://sms");
int delete = context.getContentResolver().delete(contentUri,
"(type=2 or type=5) and _id=?", new String[] { id });
* 删除最后一条收到的短信
public static final int deleteLastOneReceivedSms(Context context) {
SmsInfo smsInfo = getLastReceivedSmsInfo(context);
int del = deleteOneReceivedSms(context, smsInfo.getId());
* 删除最后一条发送的短信
public static final int deleteLastOneSendedSms(Context context) {
SmsInfo info = getLastSendedSmsInfo(context);
int delete = deleteOneSendSms(context, info.getId());
如果需要监听短信数据库的变化,比如拦截黑名单短信的业务,就要在收到黑名单号码发来的短信的时候去删除该数据。
如果有变态的需求,希望发送短信给某个号码,但是不希望显示在自己d 发件箱,也可以监听发送的数据,然后删除该数据.
public class SmsObserver extends ContentObserver {
public SmsObserver(Handler handler, Context context) {
super(handler);
this.handler =
this.context =
Log.e("aaa", "SmsObserver 被创建");
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
public void onChange(boolean selfChange) {
Log.d("aaa", "XXXXXXXX--短信数据库发生了变化\t" + selfChange);
public void onChange(boolean selfChange, Uri uri) {
Log.e("aaa", "aa--短信数据库发生了变化\t" + selfChange + " \t uri " + uri);
SmsInfo info = SmsReadDao.getLastSmsInfo(context);
if (info == null)
String type = info.getType();
Log.v("aaa", "type---" + type);
if (type.equals("1")) {
Log.e("aaa", "@收到短信- {" + info + "}了, 立即删除!!!");
String dateStr = info.getDate();
long date = Long.parseLong(dateStr);
if (System.currentTimeMillis() & date) {
if ((System.currentTimeMillis() - date) & 3000) {
int delR = SmsReadDao.deleteOneReceivedSms(context,
info.getId());
Log.e("aaa", "收信?
---删除成功?--" + delR);
if (delR & 0) {
} else if (type.equals("2") || type.equals("5")) {
Log.e("aaa", "####发送短信- {" + info + "}了, 立即删除#");
int delS = SmsReadDao.deleteOneSendSms(context, info.getId());
Log.e("aaa", "#发信?
---删除成功?--" + delS);
String dateStr = info.getDate();
long date = Long.parseLong(dateStr);
if (System.currentTimeMillis() & date) {
if ((System.currentTimeMillis() - date) & 3000) {
if (delS & 0) {
如果大家用过内容观察者就会知道,其实在其提供的回调中去删除系统数据是很危险的操作,因为你删除了一条就会导致系统数据库发送新的改变,而回调方法再次被触发。于是就会导致里面的删除逻辑不断执行,直到数据被全部删除。这样就不再有变化了。所以,我在里面做了一个时间的判断,如果操作一定的时间之前的数据,就不要去删除了。
其实我本来打算将自己删除的数据,存放到自己的数据库里面,又没有写下去了,罢了。删了就不要了吧,写进自己的数据库,以后再看咯…..
啊哈哈哈哈哈
ps:发现部分手机短信数据库,没有字段"advanced_seen"。如果没有该字段,就需要修改上面查询的代码,否则会抛运行异常。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:121321次
积分:2683
积分:2683
排名:第15057名
原创:149篇
评论:21条
(8)(7)(3)(6)(8)(16)(2)(5)(27)(2)(2)(3)(5)(1)(1)(1)(2)(1)(6)(3)(4)(9)(4)(15)(11)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 如何查看已删除的短信 的文章

 

随机推荐