首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从广播中删除短信后,从通知抽屉中清除短信通知

从广播中删除短信后,从通知抽屉中清除短信通知
EN

Stack Overflow用户
提问于 2017-03-26 06:48:46
回答 1查看 276关注 0票数 0

成功从广播中删除短信后,我无法从通知抽屉中清除通知

1)当我打开短信应用程序时,该短信被删除,但在通知中,显示带有消息的短信

2)当我点击短信通知,它打开‘短信应用程序与新的空白短信’

我尝试通过以下方式清理通知抽屉:(1)

代码语言:javascript
复制
NotificationManager notificationManager = (NotificationManager) supercontext.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();

我尝试通过以下方式清理通知抽屉:(2)

代码语言:javascript
复制
Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
closeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
supercontext.startActivity(closeIntent);

但在通知抽屉中仍然可以看到消息,下面是我在Broadcast.java中的代码:

代码语言:javascript
复制
@Override
public void onReceive(Context context, Intent intent) {
    final Bundle bundle = intent.getExtras();
    storageReference = FirebaseStorage.getInstance().getReference();
    supercontext = context;
    try {
        if (bundle != null) {
            final Object[] pdusObj = (Object[]) bundle.get("pdus");
            for (int i = 0; i < pdusObj.length; i++) {
                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = currentMessage.getDisplayOriginatingAddress();
                senderNum = phoneNumber;
                message = currentMessage.getDisplayMessageBody();
                deleteSMSHandler()
           }

public void deleteSMSHandler() {
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            try {
                deleteSMS(supercontext, message, senderNum);
            } catch (Exception e) {
            }
        }
    }, 2000);
}

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"}, null, null, null);
        if (c != null && c.moveToFirst()) {
            do {
                long id = c.getLong(0);
                long threadId = c.getLong(1);
                String where = "address=" + number;
                where = "thread_id=" + threadId;
                String address = c.getString(2);
                String body = c.getString(5);
                if (message.equals(body) && address.equals(number)) {
                    context.getContentResolver().delete(Uri.parse("content://sms/" + id), where, null);

                    NotificationManager notificationManager = (NotificationManager) supercontext.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
                    notificationManager.cancelAll();

                    Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
                    closeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    supercontext.startActivity(closeIntent);
                }
            } while (c.moveToNext());
        }

    } catch (Exception e) {
        Log.i("Delete MSG Error", "" + e);
        String x = e + "";
        //mLogger.logError("Could not delete SMS from inbox: " + e.getMessage());
    }
}

}

这是我的清单文件:

代码语言:javascript
复制
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SET_ALWAYS_FINISH" />
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
<uses-permission android:name="android.permission.BROADCAST_SMS"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name="com.sagarmakhija1994.Framework.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name="com.sagarmakhija1994.Framework.MyBroadcastReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="999">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="android.service.notification.NotificationListenerService" />
            <action android:name="android.intent.ACTION_CLOSE_SYSTEM_DIALOGS" />
        </intent-filter>
    </receiver>
</application>

EN

回答 1

Stack Overflow用户

发布于 2017-03-26 08:28:01

删除广播短信成功后的

您不能删除Android 4.4+上的短信,除非您是用户选择的短信客户端。

,但在通知抽屉中仍可见消息

对,是这样。这个Notification是由短信应用程序提出的。短信应用程序可以清除它。在Android 4.4+上,你的应用程序必须是SMS应用程序,所以你可以cancel()你自己的Notification

您可以实现a NotificationListenerService并使用它来强制清除短信。用户必须同意,在设置中,让你窥探用户的所有通知。很少有用户会这样做。而且只有Android 4.3+才能使用NotificationListenerService。因此,你唯一能从中获得任何价值的Android版本就是Android 4.3。

这里是我的清单文件

请注意,您列出的几个权限是只有系统应用程序才能拥有的权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43022866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档