当前位置: 首页 > 知识库问答 >
问题:

如何在通知中向服务发送PendingEvent后隐藏通知面板

章阳波
2023-03-14

所有的

我编写了一个服务来更新系统状态,我使用start Foreground将服务放在前台,还向其添加了通知。在通知中,我使用remoteView拥有三个带有三个OnClickPendingIntent的图像。其中一个正在发送回服务,并执行通知更新代码。

创建通知的代码:

 Intent intentApp = new Intent(this,ScreenOffWidgetConfigure.class);
 intentApp.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
 PendingIntent piApp = PendingIntent.getActivity(this, 0, intentApp, 0);

 Intent intentOnOff = new Intent(CV.SERVICE_INTENT_ACTION);
 intentOnOff.putExtra(CV.SERVICEACTION, CV.SERVICEACTION_TOGGLE);
 PendingIntent piOnOff = PendingIntent.getService(this, 0, intentOnOff, 0);

 Intent intentScreenOff = new Intent(CV.SERVICE_INTENT_ACTION);
 intentScreenOff.putExtra(CV.SERVICEACTION, CV.SERVICEACTION_SCREENOFF);
 PendingIntent piScreenOff = PendingIntent.getService(this, 1, intentScreenOff, 0);

 // setup remoteview
 RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_notification);
 remoteViews.setOnClickPendingIntent(R.id.image_logo, piApp);
 remoteViews.setOnClickPendingIntent(R.id.image_status, piOnOff);
 remoteViews.setOnClickPendingIntent(R.id.image_screenoff, piScreenOff);

 if(CV.getPrefChargingOn(this) && CV.isPlugged(this))
 {
     remoteViews.setImageViewResource(R.id.image_status,R.drawable.widget_charging_on);
 }
 else
 {
     if(CV.getPrefAutoOnoff(this))
     remoteViews.setImageViewResource(R.id.image_status,R.drawable.widget_on);
     else
     remoteViews.setImageViewResource(R.id.image_status,R.drawable.widget_off);
 }

 // build the notification
 Notification noti = new Notification.Builder(this)
 .setContent(remoteViews)
 .setSmallIcon(R.drawable.ic_launcher)
 .setOngoing(true)
 .build();

 return noti;

接收到意图后更新通知的代码:

 Notification notify = createNotification();
 final NotificationManager notificationManager = (NotificationManager) getApplicationContext()
                        .getSystemService(getApplicationContext().NOTIFICATION_SERVICE);

 notificationManager.notify(NOTIFICATION_ONGOING, notify);

我的问题是:调用我的更新功能后,通知图像实际上发生了更改;然而,通知面板仍然存在!!它不会像开展活动所应该的那样消失。

在接收到服务中的意图后,我是否可以为通知、挂起的意图或我可以使用的API调用设置标志?

共有1个答案

孙成益
2023-03-14

找到我在其他地方回答的问题:
1. Android:如何在android 4.2上折叠状态栏?2.防止状态栏扩展

首先,在AndroidM中添加使用权限行anifest.xml

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

其次,使用以下代码使其工作:

try
{
    Object service  = getSystemService("statusbar");
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
    if (Build.VERSION.SDK_INT <= 16) 
    {
        Method collapse = statusbarManager.getMethod("collapse");
        collapse.setAccessible(true);
        collapse.invoke(service);
    } 
    else 
    {
        Method collapse2 = statusbarManager.getMethod("collapsePanels");
        collapse2.setAccessible(true);
        collapse2.invoke(service);
    }
}catch(Exception ex){}

这是黑客,但它确实有效。

 类似资料:
  • null 我已经尝试调用NotificationManager.Cancel()和NotificationManager.CancelAll()。并尝试引发相同的原始PRIORITY_LOW通知。但它们都将通知图标留在状态栏中。

  • 我试着在这个论坛找到这一个,我找到了一对夫妇,但没有人为我工作。我只需要将它隐藏在通知面板中,在大图标旁边出现,但如果我隐藏它,它也会从通知栏中消失。 有没有办法像第一个和第四个通知那样只显示大图标? 这是我正在使用的代码:

  • 据我所知,Toast通知不仅适用于Windows10,而且适用于Windows8。这适用于制作服务吗?我要做的事情可能吗? 目前,我打算制作一个单独的应用程序,它只是为了发送一个通知而被调用,但这似乎是矫枉过正。

  • 在Firebase控制台中,我根据各种用户属性设置了访问群体,现在可以通过控制台向不同的用户群发送通知。有没有办法通过向fcm服务器发送http请求来实现同样的目的?“to”字段应该有一个技巧,但我想不出来。

  • 我在android应用程序中使用nodeJS和mongodb作为后端服务,并使用FCM向用户发送推送通知。为了实现这一点,我在MongoDB上保存了firebase注册令牌。 我想在相应的用户在MongoDb服务器上添加数据时向他们发送推送通知。 这是我在下面添加数据库数据的代码。 现在,一旦数据添加到数据库中,我想向用户发送通知。有人请让我知道如何才能实现所需的任务。任何帮助都将不胜感激。 谢谢

  • 我正在尝试用新的Firebase服务向我的android设备发送推送通知。我注册并安装了一个应用程序,同时我把接收通知所需的所有代码都放在了android应用程序中。通过Firebase控制台,我可以向我的应用程序发送一个通知,然后它就会被接收并显示出来。现在我想编写一个java独立服务器,向所有设备发送通知。这是我当前的代码: 这是我从他们的服务器上得到的结果: 不幸的是,简单地移除“to”标记