使用这段代码,我成功地将所有未接来电标记为已读:
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中清除呼叫通知栏?
如何在android中清除呼叫通知栏?
你不。Notification
是由另一个应用程序放在那里的,你没有办法控制Notification
是否显示,缺少建立一个ROM mod来改变其他应用程序的行为。
UPDATE:由于这个答案是最初写的,所以添加了NotificationListenerService
并可以清除通知,但仅适用于Android 4.3+。
唯一"合法"但非常丑陋且通常无用的方式来实现你想要的是显示呼叫记录给用户。我的意思是真正的展示(变得可视化,得到关注)。如果你想这么做,方法如下:
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;
}
这种混乱背后的原因是应用程序权威地负责呼叫记录和通知用户未接来电(股票电话应用程序)使用缓存值。为什么?因为整体性能。你需要以某种方式通知那些应用,Call Log已经改变了(seen也意味着改变了),它应该更新它。如果所有设备上的所有此类应用都能接收到广播以便刷新,那就太好了,但据我所知,情况并非如此。
我希望有人能找到一个更好的方法(不打断用户)来强制刷新股票手机应用程序