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

2023-12-09

All

我编写了一个服务来更新系统状态,然后使用 startForeground 将服务置于前台,同时向其添加通知。在通知中,我使用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);

我的问题是:调用我的更新函数后,通知图像实际上发生了变化;然而,通知面板仍然存在!它不会像启动活动时那样消失。

是否可以为通知、pendingIntent 设置标志,或者在服务中收到意图后可以使用哪些 API 调用?


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

首先,将使用权限行添加到AndroidManifest.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){}

这很hacky,但确实有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在通知中向服务发送 PendingIntent 后隐藏通知面板 的相关文章

随机推荐

  • 从字典列表中获取值列表

    我有一个这样的字典列表 value apple blah 2 value banana blah 3 value cars blah 4 I want apple banana cars 最好的方法是什么 假设每个字典都有一个value键
  • 在这种情况下,新的 JVM 实例或反射会有所帮助吗?

    我之前发布过一个问题 但没有得到明确的解决方案 如何防止JFrame关闭 所以我发布了 SSCCE 可能有助于更好地理解所面临的问题 package myApp import java lang reflect InvocationTarg
  • iPhone内存管理

    我正在开发一个应用程序 我想确保我正确管理内存并释放我应该释放的所有内容 在我的 viewDidLoad 方法中 我分配了一些变量来确定应用于视图的背景 用于国际化 如果我不释放它们 应用程序可以正常工作 问题是 如果我释放变量 应用程序就
  • 在反应本机样式表中使用变量将无法识别该变量

    我将颜色作为 props color 导入到我的功能组件中 并将其设置为状态 tagColor 当我在样式表中使用 tagColor 作为值来设置背景颜色时 我收到错误 找不到变量 tagColor 如何在样式表中使用变量 const Ta
  • 值与实体对象(领域驱动设计)

    我刚刚开始阅读DDD 我无法完全理解实体与值对象的概念 有人可以解释当值对象被设计为实体对象时系统可能面临的问题 可维护性 性能 等 吗 例子会很棒 简化为本质区别 身份对于实体很重要 但对于价值对象并不重要 例如 某人的姓名是一个值对象
  • WCF异常抛出和OOP方式处理

    好的 所以我就同一主题提出了另一个问题here虽然我没有得到直接的答案 但我整理了一些代码来完成我想做的事情 问题是 这种方式是否违反了一些 OOP 原则 我想要什么 使用正确的 OOP 声明服务的故障类型 在客户端有一个 catch 块
  • 是否可以使用 MediaStore.VOLUME_EXTERNAL 获取 WhatsApp 媒体文件

    我的应用程序需要备份 WhatsApp 状态 语音注释和图像的功能 如您所知 Android Q 后谷歌强制使用 MediaStore API 访问外部媒体文件 WhatsApp 还将他们的文件移至 Android media com wh
  • 使用 Scala 合并两个 CSV 文件的交集

    从输入 1 开始 fruit apple cider animal beef burger 并输入 2 animal beef 5kg fruit apple 2liter fish tuna 1kg 我需要制作 fruit apple c
  • Jquery UI 自动完成事件更改

    您好 我遇到了更改事件的问题 根据文档 应该有对象 ui item 选择一个项目后 ui item 指所选项目 始终在关闭事件后触发 但是当我尝试时 ui item 未定义 当自动完成中的输入与脚本中的数据不匹配时 我希望取消设置 s to
  • R - 添加在组内按顺序计数但重复重复的列

    我正在寻找一种解决方案来添加 desired result 列 最好使用 dplyr 和 或 ave 请参阅此处的数据框 其中组是 部分 我希望 desired results 列按顺序计数的唯一实例位于 exhibit 中 structu
  • .Net core 在静态文件夹(www)中添加文件夹并保存图像文件

    在静态文件夹中添加文件并在静态文件夹中保存图像 将 Base64 图像保存在 Dot net Core 项目中 public class EventMastersController Controller private IHostingE
  • Xcode 6.4 中的模拟器太多了

    我的 xCode 应用程序中有太多我尝试删除 但稍等片刻它又回到设备列表如何删除它 xcode 版本 6 4 6E35b 图片来自我的 xCode 设备列表中的图片 退出 Xcode 和模拟器 然后 在终端中 说 xcrun simctl
  • .包含在以下查询中并不真正包含

    var diaryEntries from entry in repository GetQuery
  • 如何使用 Struts 2 标签迭代 Set 元素

    我有两个Sets set1 contains A B C D elements set2 contains E F D G elements 我想比较每个元素set1与每一个元素set2并使用 Struts2 标签显示匹配的元素 重新整理以
  • strings.xml 中的参数可以吗? [复制]

    这个问题在这里已经有答案了 在我的 Android 应用程序中 我将通过国际化来实现我的字符串 我对不同语言的语法和句子构建方式有疑问 例如 5 分钟前 英语 vor 5 分钟 德语 我可以在 strings xml 中执行类似以下操作吗
  • 在 firebase 上使用 gzip 压缩

    我正在尝试在 Firebase 托管的 Web 上压缩 css 和 js 以提高加载速度 但是我无法使用 firebase json 配置文件为我的资产正确设置 gzip 压缩 The curl v命令显示从服务器提供文件时不执行压缩 还检
  • 为什么 std::unique_ptr 向量会出现无效指针异常

    我编写了简单的代码来帮助我理解智能指针 string s str vector
  • 如何在Android中的位图图像上添加字符串?

    我想在位图图像上添加一个字符串 我有一个方法drawTextToBitmap 这个方法工作成功 将字符串放在位图图像上 但是我的位图图像非常小 就像 pinmark 图像一样 这个函数根据位图高度和宽度设置字符串 我想放置的字符串超过位图图
  • numba 渴望编译吗?图案是什么?

    我在 numba 网站上查看了 eager Compilation 但无法弄清楚如何指定类型 他们使用的例子是这样的 from numba import jit int32 jit int32 int32 int32 def f x y A
  • 如何在通知中向服务发送 PendingIntent 后隐藏通知面板

    All 我编写了一个服务来更新系统状态 然后使用 startForeground 将服务置于前台 同时向其添加通知 在通知中 我使用remoteView获得三个带有三个OnClickPendingIntent的图像 其中之一是发送回服务 并