POST_NOTIFICATIONS 权限对话框未显示

2024-01-16

我在询问新问题时面临不受欢迎的行为POST_NOTIFICATIONS远程测试人员拥有的某些特定设备的权限 - Pixel 4a (Android 13)。遗憾的是没有日志和“电缆访问”。新安装的应用程序 - 仍然以 API30 为目标,但也尝试将目标设置为 33,只是为了测试 - 应该显示自定义启动屏幕Activity,之后显示“main”Activity,其中在onResume尝试创造NotificationChannel. 这应该会导致弹出烫发对话框 https://developer.android.com/develop/ui/views/notifications/notification-permission#new-apps

如果您的应用程序的目标版本为 12L(API 级别 32)或更低,则当您的应用程序在创建通知通道后首次启动 Activity 时,或者当您的应用程序启动 Activity 然后创建其第一个通知通道时,系统会显示权限对话框。这通常是在应用程序启动时发生的。

好吧,在装有 Android 13 的 Pixel 4a 上则不然,同时在装有 Android 13 的 Pixel 6 上会出现对话框......

最有趣的是......当测试人员安装应用程序时,第一次运行,没有对话框,然后杀死它,导航到系统设置并清除数据/缓存(甚至不会首次运行,只是在安装后清理),然后对话框显示在“第一次”运行时...

Why?!

编辑:所以现在我也可以在 Pixel 6 上重现问题。我已经介绍了中间-Dialog包含有关推送/通知中内容的信息以及简单的是/否按钮。 “是”就是创造(第一)NotificationChannel这不会导致POST_NOTIFICATIONS烫发对话框外观...

@RequiresApi(Build.VERSION_CODES.O)
fun addStaticNotificationChannel(channelId: String, nameResId: Int, descriptionResId: Int,
                                 importance: Int, soundOn: Boolean = true, forceRecreate: Boolean = false): String {
    val name = context.resources.getText(nameResId).toString()
    val description = context.resources.getText(descriptionResId).toString()

    /*if (manager.getNotificationChannel(channelId) != null) {
        if (forceRecreate) manager.deleteNotificationChannel(channelId)
        else return channelId
    }*/
    val channel = NotificationChannel(channelId, name, importance)

    channel.description = description
    channel.lockscreenVisibility = VISIBILITY_PUBLIC
    channel.setShowBadge(true)
    channel.enableLights(true)
    channel.lightColor = ContextCompat.getColor(context, R.color.tsi_blue)

    if (!soundOn)
        channel.setSound(null, null)

    Log.i(this.javaClass.simpleName, "createNotificationChannel channeldId:$channelId")
    manager.createNotificationChannel(channel)
    return channelId
}

我搞砸了targetSdk和我的项目的分支,结果是:

  • 要求烫直(ContextCompat.request...) 当定位
  • 当目标 33+ 且未授予权限(还?)时创建频道也不会显示任何对话框

对于那些无法立即跳转到 33 的人来说,这是一个全面的、面向未来的代码

val targetSdkVersion: Int = activity.applicationContext.applicationInfo.targetSdkVersion
if (targetSdkVersion < 33) {
    // behavior when targeting < 33 (Android 13), first channel creation will show perm prompt
    Log.i(this.javaClass.simpleName, "trying to create channel, when no perm")
    addStaticNotificationChannel(SOME_CHANNEL_ID, R.string.notification_some_channel_title,
            R.string.notification_some_channel_desc, IMPORTANCE_LOW, forceRecreate = true)
} else {
    Log.i(this.javaClass.simpleName, "asking for notification perm")
    ActivityCompat.requestPermissions(activity, arrayOf(android.Manifest.permission.POST_NOTIFICATIONS), 89)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POST_NOTIFICATIONS 权限对话框未显示 的相关文章

随机推荐

  • 使用故事板时,IBoutlets 很快为零

    在我的一个ViewControllers 当我到达viewWillAppear 我所有的IBOutlets are nil 我尝试查看 matt的解决方案 但它适用于笔尖而不是故事板 这只是当我在 iOS 7 设备上运行应用程序时出现的问题
  • 重新打包 .jar 文件

    我需要将 JRE7 库中的一些 jar 添加到我的 Android 项目中 但例如rt jar与以下内容相冲突android jar来自 Adroid 2 2 SDK 所以我收到此错误 不明智或错误地使用核心类 java 或 javax 当
  • 适用于 Linux 和 PHP 5.4 的 MSSQL Server 本机 ODBC 驱动程序

    我在 Linux Debian 6 x64 上有 Apache 2 2 16 和 PHP 5 4 3 要安装适用于 Linux 的 MSSQL Server 的本机 ODBC 驱动程序 我使用以下说明 http www codesynthe
  • 如何强制重新编译 Linq to SQL 查询的执行计划?

    我有一个动态创建的 LINQ to SQL 查询 有趣的是 当我在 SQL Management Studio 中运行它时 速度快如闪电 当我从 L2S 运行它时 一段时间后它变得非常慢 这可能是由于查询计划 执行计划造成的 当我重新启动
  • 连接两个表时索引如何提高性能

    在我们的一篇练习论文中 我们被问到了标题中的问题 我读过的大多数文章都说索引可以提高连接的性能 但没有告诉我如何提高 也许这是显而易见的事情 不需要说明 索引本质上是对列进行排序 对吗 所以我想按顺序排列一列会更容易操作 还有更多吗 还是我
  • 以简单的方式将 SQL 转换为 SQLite? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我的问题 有人有一种超级简单的方法在
  • 主机名未解析为本地 IP 地址

    我正在 vmware Fusion 中运行 Windows 8 虚拟机 它在运行 OSX 10 10 Yosemite 的 Mac 内运行 VM 的计算机名称为 Proud 当我从内部 ping 虚拟机时 即ping a 192 168 0
  • 基于逗号分隔字符向量列值的Python熔化数据框

    我目前正在进行一项测试 其中有不同的区域和一些相关的统计数据 以及位于这些区域的以逗号分隔的基因列表 该列表的数量是可变的 并且可能不包含任何内容 NA 我怎样才能 融化 这个数据框 region id statistic genelist
  • 使用 Excel VBA 编写和格式化 Word 文档

    我正在尝试使用 Excel VBA 编写 Word 文档 我可以创建一个Word文档 向其中写入文本 更改样式都不是问题 我想做的是将一些文本居中 但我一生都无法弄清楚 这是我用来编写文档的代码 Set wrdApp CreateObjec
  • 显示并关闭模态视图控制器 UIImagePickerController 之后,我的 Cocos2d iPhone 应用程序不再看到多次触摸

    我有一个应用程序 我在其中显示照片选择器 UIImagePickerController 但在用户关闭后 只有单次触摸才起作用 我想我知道问题的根源 但我不知道如何解决它 在显示模式对话框之前 触摸期间的堆栈如下所示 3 0x00074de
  • CakePHP 3 手动安装

    目前我使用 CakePHP 2 6 8 我想迁移到 CakePHP 3 安装指南 http book cakephp org 3 0 en installation html推荐使用Composer 但 Composer 并不能完成所有工作
  • 对数组中每个值的新 API 调用

    我基本上想要这种对象 id 5040 requester id 1234 requester name 约翰 id 5046 requester id 999 requester name 吉姆 id 5049 requester id 5
  • 使用CSS创建水平树

    我有一个数组 用于填充谱系表 它的顺序是这样的 3 1 4 5 2 6 等等 一个例子是http bullybloodlines net dogdetails php name muscletone 27s lucky bam bam of
  • 使用另一个类的 JavaFx 应用程序实例

    我有一个如下所示的 MainWindowFx 类 它基本上创建了一个简单的JavaFX GUI package drawappfx import javafx stage Stage import javafx scene Scene im
  • 流读(0)指令

    我在这里找到了一个代码https github com substack stream handbook https github com substack stream handbook它从流中读取 3 个字节 我不明白它是如何工作的 p
  • 背书政策不起作用

    当我使用管理员部署一个网络时 一个组织包括三个对等点 我的endorsement policy json如下 但不起作用 identities role name member mspId Org1MSP policy 1 of signe
  • 在网络上区分 iPadOS 和 macOS

    iPadOS beta 上 Safari 的用户代理目前与 macOS 上的 Safari 完全相同 还有其他方法可以区分 iPad 和 Mac 吗 iPad running iOS Mozilla 5 0 iPad CPU OS 10 3
  • Selenium WebDriver 有录像机吗?

    我正在 Selenium Webdriver 中使用 IE 特定应用程序 我知道我们可以截取执行的屏幕截图 同样 是否有任何选项可以将硒执行记录为视频 WebDriver 中什么也没有 酱料用途http www ffmpeg org htt
  • 如何让 AutoFixture AutoMoq 返回实例化对象中注入服务的结果?

    我正在尝试测试使用存储库服务的服务类 我设置了自定义设置 我认为应该与我的存储库服务一起使用 但返回默认的匿名结果 如果您查看下面的代码示例 当我调用 svc GetFoos 方法时 我试图获取在自定义类中注册的 Foo 对象 但我什么也没
  • POST_NOTIFICATIONS 权限对话框未显示

    我在询问新问题时面临不受欢迎的行为POST NOTIFICATIONS远程测试人员拥有的某些特定设备的权限 Pixel 4a Android 13 遗憾的是没有日志和 电缆访问 新安装的应用程序 仍然以 API30 为目标 但也尝试将目标设