接收后删除sms android没有延迟

我有一些代码以编程方式删除 Android SMS消息,但当我尝试在onReceive中删除它时,没有删除短信.

删除短信的示例代码

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);

    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);

            if (message.equals(body) && address.equals(number)) {
                // mLogger.logInfo("Deleting SMS with id: " + threadId);
                context.getContentResolver().delete(Uri.parse("content://sms/" + id),null);
            }
        } while (c.movetoNext());
    }
} catch (Exception e) {
    // mLogger.logError("Could not delete SMS from inBox: " +
    // e.getMessage());
}

当我将其粘贴到onReceived时,则不会删除新的SMS.

解决方法

您需要为清单文件添加权限并提高SMS Receiver类的优先级
<receiver android:name=".SMSReceiver" > 
    <intent-filter android:priority="1000"> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver>

这是因为它会在任何操作系统级操作之前调用SMSReceiver,例如(保存短信,通知,短信等等).

然后在SMSReceiver onReceive()中你需要添加abortbroadcast()来中止任何进一步的广播

public void onReceive(Context context,Intent intent) {
  abortbroadcast();
}

就这样

干杯

Ayush Shah

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...