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

如何识别WhatsApp通知是来自AndroidMarshmallow中的群组还是个人?

苏彭薄
2023-03-14

我正在为WhatsApp构建一个聊天机器人,并使用notificationListenerService获取通知。到目前为止,一切都在Android9中运行良好,我能够发送通知,也能够识别通知是否来自群组对话。但当我尝试使用Android6时,我无法识别该通知是否来自群组对话。这对我很重要,因为我不想回复群组对话。这是我使用的代码

public void onNotificationPosted(StatusBarNotification sbn) {
    Log.w(TAG, "onNotificationPosted: ");
    if(!sbn.getPackageName().equals(WHATSAPP_PKG) || sbn.isOngoing()) return;

    Notification notification = sbn.getNotification();
    if (notification != null) {
        Bundle bundle = notification.extras;

        Log.d(TAG, "onNotificationPosted: Print Keys");
        for(String k : bundle.keySet()) {
            Log.d(TAG, "KEY : " + k + " -> " + bundle.get(k));
        }
        ArrayList<RemoteInput> remoteInputs = getRemoteInputs(notification);

        Object isGroupConversation = bundle.get(NotificationCompat.EXTRA_IS_GROUP_CONVERSATION);
        Object hiddenConversationTitle = bundle.get(NotificationCompat.EXTRA_HIDDEN_CONVERSATION_TITLE);
        String conversationTitle = bundle.getString("android.conversationTitle");

       
        Log.d(TAG, "onNotificationPosted: isGP " + isGroupConversation);//always null for API 23
        Log.d(TAG, "onNotificationPosted: hideCovTitle " + hiddenConversationTitle);//always null for API 23
        Log.d(TAG, "onNotificationPosted: convoTitle " + conversationTitle); //always null for API 23

        if (isGroupConversation != null) {
            boolean isGroup = (((boolean) isGroupConversation) && (conversationTitle != null));//Group Params
            Log.d(TAG, "isGroupConversation: " + isGroup);//This is working fine in android 9 but not in Android 6
        }else{
            Log.e(TAG, "is GroupConversation : NULL ");
        }

        String title = bundle.getString(NotificationCompat.EXTRA_TITLE);
        Object msz = bundle.get(NotificationCompat.EXTRA_TEXT);
        if(msz != null && title != null){
            if(msz.equals("Hi")) {
                Log.d(TAG, "onNotificationPosted: msz HI");
                if (!remoteInputs.isEmpty()){
                    Log.d(TAG, "onNotificationPosted: remote inputs " + remoteInputs.toString());
                    sendMessage(notification,"Hey there!!", bundle, remoteInputs);
                }
            }
        }       
    }
}

在两个设备上打印完密钥后,我将在android 6中获得bundle.get(notificationcompat.extra_is_group_conversation)的null值,但在android 9中没有。现在我想知道如何识别通知是否来自群组对话。这是Android6的按键记录

onNotificationPosted: Print Keys
    KEY : android.title -> temp
    KEY : android.subText -> null
    KEY : android.template -> android.app.Notification$BigTextStyle
    KEY : android.showChronometer -> false
    KEY : android.icon -> 2131231578
    KEY : android.text -> vijat: hi
    KEY : android.progress -> 0
    KEY : android.progressMax -> 0
    KEY : android.showWhen -> true
    KEY : android.rebuild.applicationInfo ->ApplicationInfo {1aaef78 com.whatsapp}
    KEY : android.people -> [Ljava.lang.String;@98eb651
    KEY : android.largeIcon -> android.graphics.Bitmap@f67eb6
    KEY : android.bigText -> name: hi
    KEY : android.infoText -> null
    KEY : android.wearable.EXTENSIONS -> Bundle[mParcelledData.dataSize=936]
    KEY : android.originatingUserId -> 0
    KEY : android.progressIndeterminate -> false
    KEY : android.summaryText -> 1 new message

共有1个答案

齐磊
2023-03-14

有一个解决办法。查看的值

KEY : android.bigText -> name: hi

这里的名称必须是组名。因此,从这里您可以拆分字符串,并确定该消息是否来自该组。

 类似资料:
  • 问题内容: 我正在使用nodejs和expressjs。我想知道clientRequest对象中是否有类似的东西。我想为Web链接构建baseUrl。因此,如果请求是通过https完成的,我想在所有链接中保留https。 问题答案: 编辑: 对于Express,它更安全,建议使用(如@Andy在下面建议)。尽管它使用类似的实现,但将来可以安全使用,并且还可以选择支持标头。 话虽如此,对于您的用例而

  • 首先,一些定义,以确保我使用的术语是清楚的: > 强实体和弱实体以及强/识别和弱/非识别关系:在ERD中,弱/非识别关系是连接两个强实体的关系,并用虚线表示。强/标识关系是将强实体连接到弱实体(即包含其相关实体的主键[PK]作为其自身组件的实体)的关系 <罢工> 组件 主键),并由实线指示。 例如,考虑一下这张图(从另一篇文章中借来): 课程(强实体)和类(弱实体)之间的关系是强关系(实线),因为

  • 我知道在我发送请求并期望响应的情况下,或者在IP链接了域的情况下,IP地址会更有效,而不是域作为服务器的ID。但是,我的手机没有链接的域名和IP可以很容易地改变。 那个“ID”是什么,使Google的服务器能够将通知发送给我?

  • 问题内容: 我有一个小字节数组(小于25K),可以作为较大的邮件信封的一部分进行接收和解码。有时,这是图像,而且是JPG。除字节数组外,我没有其他上下文信息,并且需要标识这是否是图像以及图像是否为JPG类型。 是否有一些魔术数字或魔术字节存在于开头,结尾或某个偏移量处,我可以查看它们以识别它? 我的代码示例如下(从内存而不是c / p): 我真的需要什么会 方法,甚至指向详细说明它的规范的指针。我

  • 我知道这是一个古老的问题,可以在很多地方找到,但我仍然无法找到解决方案。 我想要的是,如果我使用手机的库存相机拍摄图像或从图库中选择图像,它应该告诉我图像的方向或确切的高度和宽度,以便我可以决定方向。 到目前为止,我使用stackoverflow尝试的是:- 但问题是,当使用相机捕获图像时,它分别给出6和1的纵向和横向。如果从图库中选择图像,它会给我0。所以我无法确定图像是风景还是肖像。 提前感谢

  • 本文向大家介绍JavaScript中0、空字符串、'0'是true还是false的知识点分享,包括了JavaScript中0、空字符串、'0'是true还是false的知识点分享的使用技巧和注意事项,需要的朋友参考一下 最近被问到关于js中空字符串是true还是false得问题,一时间没想起来,现在在chrome的console面板上输出代码测试一下。 "" == false 结果是true