我正在构建使用切换按钮启动的通知:
toggleLigar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(toggleLigar.isChecked()){
NotificationUtil.cancelaAll(TelaCriaDesp.this);
CharSequence tickerText = "Despertador ativado!";
CharSequence title = "Você não vai perder seu ponto!";
CharSequence message = "O despertador " + despertador.getNomeDesp() + " está ativo!";
Intent intent = new Intent(TelaCriaDesp.this, TelaCriaDesp.class);
NotificationUtil.criaNotification(TelaCriaDesp.this, tickerText, title, message,
despertador.getDesp_id(), intent);
} else {
NotificationUtil.cancelaNotification(TelaCriaDesp.this, despertador.getDesp_id());
}
}
});
现在我想根据通知状态将切换按钮分配为ON或OFF,如果它处于活动状态(正在显示)它是ON,非活动OFF ...我试过这个:
public static boolean testaNotification(int id, Context context){
Intent intent = new Intent(context, TelaCriaDesp.class);
//intent.setAction(Intent.);
PendingIntent teste = PendingIntent.getActivity(context, id, intent,
PendingIntent.FLAG_NO_CREATE);
return teste != null;
}
但它不起作用,它总是返回NULL ...
这是我的通知创建:
public class NotificationUtil {
@SuppressWarnings("deprecation")
public static void criaNotification(Context context, CharSequence tickerText, CharSequence title,
CharSequence message, int id, Intent intent){
PendingIntent aoSelecionar = PendingIntent.getActivity(context, 0, intent, 0);
Notification notification = null;
int apiLevel = Build.VERSION.SDK_INT;
if(apiLevel >= 11){
Builder montaNotification = new Notification.Builder(context)
.setContentTitle(tickerText)
.setContentText(message)
.setSmallIcon(R.drawable.icon)
.setContentIntent(aoSelecionar);
//montaNotification.setAutoCancel(true);
montaNotification.setOngoing(true);
if(apiLevel >= 17){
notification = montaNotification.build();
} else {
notification = montaNotification.getNotification();
}
} else {
notification = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());
notification.setLatestEventInfo(context, title, message, aoSelecionar);
//notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.flags |= Notification.FLAG_ONGOING_EVENT;
}
NotificationManager manager = (NotificationManager)
context.getSystemService(Activity.NOTIFICATION_SERVICE);
manager.notify(id, notification);
}
答案 0 :(得分:3)
从API 23开始,您可以使用NotificationManager方法getActiveNotifications()。这将返回应用程序以数组形式启动的活动通知列表。
因此,要检查特定通知是否处于活动状态,您可以迭代此数组的元素并比较通知ID /标记。
在此处阅读有关此方法的更多信息: NotificationManager.getActiveNotifications()
答案 1 :(得分:1)
你做不到。如果需要,您必须手动跟踪它。
事实上,Notification
仅用于通知用户某些事件。如果您需要检查通知是否存在 - 那么实际上您需要检查事件(关于哪个是通知)是否仍然有效。
在您的情况下,您可以在创建通知时在本地数据库中保留信息。 向通知添加contentIntent,以便在用户通过单击来解除通知时能够正确标记数据库项。 然后,当您需要测试通知是否存在时,只需在本地数据库中查找有效行。
如果您只有一个关于该类型的简单通知,您可以在首选项文件中保留一个布尔标志。