以编程方式删除短信无法正常工作。

5
我想删除模拟器中的短信。 但是,即使我尝试了这里的所有示例,仍然无法成功。
我甚至没有收到任何错误。 在我的活动中,我创建了一个BroadcastReceiver,用于响应传入的短信。 然后处理完成后,应该删除短信。 但是,我无法删除任何信息,即使我尝试删除它们所有。 但我可以阅读内容。
也许有人有主意吗?以下是我的代码:
@Override
public void onResume() {
    super.onResume();
    //registerReceiver(mMessageReceiver, new IntentFilter(Constants.BROADCAST_SMS));
    //  IntentFilter customIntentFiler = new     IntentFilter("android.provider.Telephony.SMS_RECEIVED");
    //customIntentFiler.setPriority(1000);
    registerReceiver(mMessageReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
    // registerReceiver(mMessageReceiver, customIntentFiler);
}
@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mMessageReceiver);
}

//This is the handler that will manage to process the broadcast intent
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Extract data included in the Intent

        Bundle bundle = intent.getExtras();
        if (bundle != null) {

            Log.d("[" + Constants.SERVICE_SMS + "] " + "SMS received");

            Object[] pdus = (Object[])bundle.get("pdus");
            SmsMessage sms = SmsMessage.createFromPdu((byte[])pdus[0]);



            //check if SMS content 

            Log.d("[" + Constants.SERVICE_SMS + "] " + "SMS data:" +     sms.getMessageBody().toString());
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

            String[] smsParts = sms.getMessageBody().toString().split(";");


            //ToDo filter logic
        }
    }
}; 

private void DeleteSMS(Context context, Intent intent){
  try {
 // mLogger.logInfo("Deleting SMS from inbox");
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor c = context.getContentResolver().query(uriSms, new String[] { "_id", "thread_id", "address", "person",
    "date", "body" }, null, null, null); 

      Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS" + uriSms);

      //getContentResolver().delete(Uri.parse("content://sms/1"), 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);
        Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS ID"+ id);
        Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS threadID" + threadId);
        Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS address" + address);
        Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS body" + body);
        getContentResolver().delete(Uri.parse("content://sms/inbox/" + id), null, null);
        //getContentResolver().delete(Uri.parse("content://sms/inbox/" + threadId), null, null);
    } while (c.moveToNext());
        }
    } catch (Exception e) {
        // mLogger.logError("Could not delete SMS from inbox: " +
        // e.getMessage());
      Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS failed");
    }
}

我的清单开始如下:

<uses-sdk 
    android:minSdkVersion="16"
    android:targetSdkVersion="21" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接