Android 检查通知是否处于活动状态

Android 检查通知是否处于活动状态,android,android-notifications,android-pendingintent,Android,Android Notifications,Android Pendingintent,我正在生成一个通过切换按钮启动的通知: toggleLigar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(toggleLigar.isChecked()){ Notificati

我正在生成一个通过切换按钮启动的通知:

    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());
            }
        }
    });
现在,我想根据通知状态将切换按钮指定为打开或关闭,如果它处于活动状态(正在显示),则为打开,非活动状态为关闭。。。我试过这个:

    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;
}
但它不工作,它总是返回空值

以下是我的通知创建:

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

}

你不能。如果需要,您必须手动跟踪它。 事实上,
通知
仅用于通知用户某些事件。如果您需要检查通知是否存在,那么实际上,您需要检查事件(通知所涉及的)是否仍然有效

在您描述的情况下,您可以在创建通知时将信息保留在本地数据库中。 在通知中添加
contentIntent
,以便在用户通过单击通知来解除通知时能够适当地标记数据库项。 然后,当需要测试通知是否存在时,只需在本地数据库中查找有效行


如果您只有一个给定类型的简单通知,则可以在首选项文件中保留布尔标志,而不需要本地数据库使用。

您不能。如果需要,您必须手动跟踪它。 事实上,
通知
仅用于通知用户某些事件。如果您需要检查通知是否存在,那么实际上,您需要检查事件(通知所涉及的)是否仍然有效

在您描述的情况下,您可以在创建通知时将信息保留在本地数据库中。 在通知中添加
contentIntent
,以便在用户通过单击通知来解除通知时能够适当地标记数据库项。 然后,当需要测试通知是否存在时,只需在本地数据库中查找有效行


如果您只有一个给定类型的简单通知,则可以在首选项文件中保留一个布尔标志,而无需本地数据库使用。

从API 23及更高版本,您可以使用NotificationManager方法getActiveNotifications()。这将以数组的形式返回应用程序启动的活动通知列表

因此,要检查某个特定通知是否处于活动状态,只需迭代该数组的元素并比较通知ID/标记

请在此处阅读有关此方法的更多信息:

在API 23及更高版本中,您可以使用NotificationManager方法getActiveNotifications()。这将以数组的形式返回应用程序启动的活动通知列表

因此,要检查某个特定通知是否处于活动状态,只需迭代该数组的元素并比较通知ID/标记

请在此处阅读有关此方法的更多信息: