从收件箱中删除一条短信
Posted
技术标签:
【中文标题】从收件箱中删除一条短信【英文标题】:Delete an sms from inbox 【发布时间】:2012-03-12 11:34:42 【问题描述】:一旦用户阅读了一条短信,我想从收件箱中删除它。如何做到这一点?
编辑:
公共类 SmsReceiver 扩展广播接收器
@Override
public void onReceive(Context context, Intent intent)
// TODO Auto-generated method stub
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String address = null;
if(bundle!=null)
String info = " ";
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
address=msgs[i].getDisplayOriginatingAddress();
info += msgs[i].getMessageBody().toString();
/*String str=bundle.getString("state");
Log.v("State",str);*/
if((PhoneNumberUtils.isWellFormedSmsAddress(address))) //set ! and address length
//abortBroadcast();
Log.v("phone num","wellformed");
Uri deleteUri = Uri.parse("content://sms");
Cursor c = context.getContentResolver().query(deleteUri, null, null,
null, null);
while (c.moveToNext())
try
// Delete the SMS
String pid = c.getString(0); // Get id;
String uri = "content://sms/conversations/" + pid;
context.getContentResolver().delete(Uri.parse(uri),
null, null);
catch (Exception e)
Log.v("exception","occurred");
这段代码有什么问题?短信没有被删除
【问题讨论】:
【参考方案1】:您可以使用以下方法从收件箱中删除短信,
private void deleteMessage()
Cursor c = getContentResolver().query(SMS_INBOX, null, null, null, null);
//c.moveToFirst();
while (c.moveToNext())
System.out.println("Inside if loop");
try
String address = c.getString(2);
String MobileNumber = mainmenu.getParameterData().getMobileNumber().trim();
//Log.i( LOGTAG, MobileNumber + "," + address );
Log.i( LOGTAG, c.getString(2) );
if ( address.trim().equals( MobileNumber ) )
String pid = c.getString(1);
String uri = "content://sms/conversations/" + pid;
getContentResolver().delete(Uri.parse(uri), null, null);
stopSelf();
catch (Exception e)
e.printStackTrace();
【讨论】:
这可以在 5.0 中使用吗?使用相同的代码将我的光标返回为空。【参考方案2】:试试这个以获得完整的删除解决方案...
public void deleteSMS(Context context, String message, String number)
try
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor c = context.getContentResolver().query(
uriSms,
new String[] "_id", "thread_id", "address", "person",
"date", "body" , "read=0", null, null);
if (c != null && c.moveToFirst())
do
long id = c.getLong(0);
long threadId = c.getLong(1);
String address = c.getString(2);
String body = c.getString(5);
String date = c.getString(3);
Log.e("log>>>",
"0>" + c.getString(0) + "1>" + c.getString(1)
+ "2>" + c.getString(2) + "<-1>"
+ c.getString(3) + "4>" + c.getString(4)
+ "5>" + c.getString(5));
Log.e("log>>>", "date" + c.getString(0));
if (message.equals(body) && address.equals(number))
// mLogger.logInfo("Deleting SMS with id: " + threadId);
context.getContentResolver().delete(
Uri.parse("content://sms/" + id), "date=?",
new String[] c.getString(4) );
Log.e("log>>>", "Delete success.........");
while (c.moveToNext());
catch (Exception e)
Log.e("log>>>", e.toString());
【讨论】:
以上是关于从收件箱中删除一条短信的主要内容,如果未能解决你的问题,请参考以下文章
Android 从收件箱获取短信,优化的方式来阅读所有消息并将它们分组
将收到的 Facebook 消息(聊天 + 消息)转发到我的电子邮件收件箱,然后从我的 Facebook 收件箱中删除它们