0

Using this code I managed to mark all missed calls as read:

ContentValues values = new ContentValues();
        values.put(Calls.NEW, 0);
        if (android.os.Build.VERSION.SDK_INT >= 14) {
            values.put(Calls.IS_READ, 1);
        }
        StringBuilder where = new StringBuilder();
        where.append(Calls.NEW);
        where.append(" = 1 AND ");
        where.append(Calls.TYPE);
        where.append(" = ?");

        context.getContentResolver().update(Calls.CONTENT_URI, values, where.toString(),
                new String[]{ Integer.toString(Calls.MISSED_TYPE) });

but in the android notification bar I still have a flag with missed calls. How can I also clear the notification bar for calls in android?

4

2 回答 2

3

如何在android中清除通话通知栏?

你没有。那Notification是由另一个应用程序放在那里的,你无法控制它是否Notification显示,除非构建一个改变其他应用程序行为的 ROM 模块。

更新:由于此答案最初是编写的,NotificationListenerService因此已添加并可以清除通知,但仅适用于 Android 4.3+。

于 2013-05-15T13:27:45.793 回答
0

实现您想要的唯一“合法”但极其丑陋且通常无用的方法是将通话记录显示给用户。我的意思是字面上的展示(变得视觉化,获得焦点)。如果您想这样做,请按以下步骤操作:

public static boolean showCallLog(Context context)
{
    try
    {
        Intent showCallLog = new Intent();
        showCallLog.setAction(Intent.ACTION_VIEW);
        showCallLog.setType(android.provider.CallLog.Calls.CONTENT_TYPE);
        context.startActivity(showCallLog);
        return true;
    }
    catch (Exception e)
    {
        Log.d("Couldn't show call log.", e.getMessage());
    }
    return false;
}

这种混乱背后的原因是,负责记录通话和通知用户未接来电的应用程序(股票电话应用程序)使用缓存值。为什么?因为综合性能。您需要以某种方式通知这些应用程序呼叫日志已更改(可见意味着已更改)并且应该更新它。如果所有设备上的所有此类应用程序都能接收广播以进行刷新,那就太好了,但据我所知,情况并非如此。

我希望有人会找到一种更好的方法(不打断用户)来强制刷新股票手机应用程序。

于 2014-10-25T15:37:49.090 回答