清除未接来电并清除android栏中的通知

时间:2013-05-15 13:26:32

标签: android calllog

使用此代码我设法将所有未接来电标记为已读:

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

但是在android通知栏中我还有一个未接来电的标志。我怎样才能清除android中调用的通知栏?

2 个答案:

答案 0 :(得分:3)

  

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

你没有。 Notification被另一个应用程序放在那里,你无法控制是否显示Notification,而不是构建一个改变其他应用程序行为的ROM mod。

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

答案 1 :(得分: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;
}

这种混乱背后的原因是,权威负责呼叫记录并通知用户未接来电(股票电话应用)的应用使用缓存值。为什么?因为整体表现。您需要以某种方式通知那些应用程序呼叫日志已更改(看到意味着已更改),并且应该更新它。如果所有设备上的所有此类应用程序都会收到广播以便刷新,那将是很好的,但据我所知,情况并非如此。

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