首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Android 11上实现安卓泡沫通知(Api 30)+ )

如何在Android 11上实现安卓泡沫通知(Api 30)+ )
EN

Stack Overflow用户
提问于 2020-11-20 23:54:36
回答 1查看 1.3K关注 0票数 1

我正在尝试实现Android泡泡通知API,但它并不适用于我,它显示为一个普通的通知。我正在仿真器API 30(Android 11)上进行测试。我让人-榜样在设备上工作,我正在遵循会话通知准则。

  • 通知使用MessagingStyle。
  • (只有当应用程序以Android 11或更高版本为目标时,通知才与有效的长寿命动态或缓存共享快捷方式相关联。通知可以通过调用setShortcutId()或setShortcutInfo()来设置此关联。如果该应用程序的目标是Android 10或更低版本,则通知不一定必须与快捷方式相关联,正如“备用选项”部分所讨论的那样。
  • 在发布时,用户还没有通过通知通道设置将会话从会话部分降级。

请告诉我我错过了什么?

另外,我还有一些关于气泡设计的可选问题。

  • 在应用程序的哪一点,我应该创建快捷方式和什么时候更新它?
  • 需要如何缓存Person对象?

这就是我到目前为止所得到的

代码语言:javascript
运行
复制
    Recipient recipient = ...; // Sender data
    Message message = ...;     // Message data

    Intent intent = new Intent(context, ChatActivity.class);
    intent.putExtra(ChatActivity.CONVERSATION_ID, message.conversationId);

    PendingIntent bubbleIntent =
            PendingIntent.getActivity(context, 0, intent, 0);

    IconCompat icon = loadIcon(recipient);
    Person person = loadPerson(recipient, icon);

    NotificationCompat.MessagingStyle style = getMessagingStyle(person);

    createOrVerifyChannel();

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setContentTitle(getNewMessagesCount(message) + " new messages with " + person.getName())
            .setCategory(Notification.CATEGORY_MESSAGE)
            .setContentText(message.text)
            .setBubbleMetadata(
                    new NotificationCompat.BubbleMetadata.Builder()
                            .setDesiredHeight(600)
                            .setIntent(bubbleIntent)
                            .setAutoExpandBubble(true)
                            .setSuppressNotification(true)
                            .setIcon(icon)
                            .build()
            )
            .addPerson(person)
            .setSmallIcon(R.mipmap.ic_launcher_round)
            .setWhen(message.date)
            .setStyle(style)
            .setShortcutInfo(
                    new ShortcutInfoCompat.Builder(context, message.conversationId + "")
                            .setActivity(new ComponentName(context, ChatActivity.class))
                            .setCategories(new HashSet<>(Collections.singletonList(Notification.CATEGORY_MESSAGE)))
                            .setIcon(icon)
                            .setPerson(person)
                            .setRank(0)
                            .setShortLabel(person.getName())
                            .setIntent(intent)
                            .build()
            )
            .build();


    NotificationManagerCompat.from(context).notify(message.id + "," + message.type,
            message.id, notification);

清单

代码语言:javascript
运行
复制
 <activity
        android:name=".screens.chat.ChatActivity"
        android:allowEmbedded="true"
        android:resizeableActivity="true"
        tools:targetApi="n" />

Gradle

代码语言:javascript
运行
复制
targetSDKVersion 30
implementation 'androidx.appcompat:appcompat:1.3.0-alpha02'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-23 15:38:56

我错过的一件事是为.setLongLived(true)添加了ShortcutInfoCompat。它解决了问题。

我了解到,最好在应用程序级别上管理ShortcutInfo,因为一次最多可以有5次,所以缓存内存中的内容没有坏处,它还包括Person对象。

另外,您应该为LocusId添加NotificationCompat,这个id在快捷方式、通知和视图之间共享。要将其添加到视图中,需要添加一些额外的工作,如ContentCaptureManager中所述

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64938421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档