java - 以编程方式删除短信不起作用

标签 java android sms broadcastreceiver

我正在尝试删除模拟器中的 SMS。 但是在尝试了这里的所有示例之后,它仍然不起作用。

我什至没有收到错误。 在我的 Activity 中,我创建了一个 BroadcastReceiver,它对传入的 SMS 使用react。 然后当处理完成后,SMS 应该被删除。 但是我无法删除任何消息,即使我尝试将它们全部删除。 但我可以阅读内容。

也许有人有想法?到目前为止,这是我的代码:

@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");
    }
}

我的 list 的开头是这样的:

<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"/>

最佳答案

如果您在 kitkat 之后尝试使用此应用程序,它将无法正常工作。

http://android-developers.blogspot.com.tr/2013/10/getting-your-sms-apps-ready-for-kitkat.html?m=1

查看 play 商店中的短信拦截器,它们会通知您同样的事情。

关于java - 以编程方式删除短信不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32227795/

相关文章:

java - 创建 JSONArray 时出现 NullPointerException

android - 获取 http ://schemas. android.com/apk/res/android 时出错

java - 在android中填充短信

php - 如何解析stdclass

java - 警告缺少 Spring 属性

java - Maven 在命令提示符下工作,但在 Powershell 下不工作

android - 如何获得人类可读的 Android 操作系统版本

xcode - CKSMSComposeRemoteViewController 等待来自 com.apple.mobilesms.compose 的栅栏屏障超时

java - 按照文件夹中创建的顺序列出文件

java - Wicket - 更新 PropertyModel 时表单组件丢失引用