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

当应用程序在后台时,火警通知不显示图像

施阳夏
2023-03-14
  • 当应用程序处于前台时,我可以成功地接收带有图像的通知和数据消息。
  • 当应用程序在后台/kill时,onMessageReceed(message)没有调用,所以我使用getIntent(),我得到了数据,但当应用程序在后台时,android os会使用系统托盘自动显示通知,但图像无法显示。
  • 所以我的问题是用图像显示通知文本?

我使用django api发送通知和发送的数据如下所示

    fields = {
        'registration_ids': registrationIds,
        "notification" : {
          "body" : desc,
          "title" : name,
          "icon" : "https://urbanmatter.com/chicago/wp-content/uploads/2015/04/Girls-Shopping.jpg"
        },
        "data" : {
          "id" : "1",
          "body" : desc,
          "title" : name,
          "image" : "https://urbanmatter.com/chicago/wp-content/uploads/2015/04/Girls-Shopping.jpg"
        }
    }

下面是我的onMessageReceed()方法

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData().get("id"));
        id = String.valueOf(remoteMessage.getData().get("id"));
    }
    if (remoteMessage.getNotification() != null) {
        String title = remoteMessage.getNotification().getTitle();
        String message = remoteMessage.getNotification().getBody();
        String icon = remoteMessage.getNotification().getIcon();
        Intent intent = new Intent(this, AnotherActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("id",id);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        final NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setContentTitle(title);
        notificationBuilder.setContentText( message);
        notificationBuilder.setContentIntent(pendingIntent);
        notificationBuilder.setSound(defaultSoundUri);
        notificationBuilder.setSmallIcon(R.drawable.jv);
        notificationBuilder.setAutoCancel(true);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());

        ImageRequest imageRequest = new ImageRequest(icon, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {
                notificationBuilder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(response));
                NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                notificationManager.notify(0, notificationBuilder.build());
            }
        }, 0, 0, null, Bitmap.Config.RGB_565,new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        MySingleton.getmInstance(this).addToRequestQue(imageRequest);
    }
}

共有1个答案

全飞扬
2023-03-14

在FCM消息中添加这些行

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_face)
            .setContentTitle("title")
            .setContentText("message").setStyle(new NotificationCompat.BigPictureStyle().bigPicture(bitmap))
                .setLargeIcon( getBitmapfromUrl(messageBody.getData().get("**YOUR_IMAGE_URL**")));

  public Bitmap getBitmapfromUrl(String imageUrl) {
    try {
        URL url = new URL(imageUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap bitmap = BitmapFactory.decodeStream(input);
        return bitmap;

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;

    }
}
 类似资料:
  • index.js中的代码 bgmessaging.js中的代码负责应用程序在后台时的推送 为了在应用程序处于前台时带来图像,我使用了下面的代码:-

  • 我想为一个聊天应用程序实现FCM推送通知服务,我遵循Firebase文档中的步骤,当通知从Firebase控制台发送到我的设备时,我会得到通知。当我尝试使用http post to https://FCM.googleapis.com/FCM/send通过FCM将通知通过服务器端发送到设备时: 当应用程序处于活动状态并且我正在将此通知发送到我的设备时,Im在我的控制台日志中收到以下消息,所以我认为

  • null 而当app在后台时,系统托盘总是显示一个到达一个重复的通知(如收到通知a,系统托盘显示2个通知a)。 怎么解决这个问题? 编辑:添加的代码 我扩展了 类,并在 方法中包含该类 这是项目中我使用NotificationManager的唯一部分。 另外,我尝试在这个方法上添加一个日志。当应用程序处于前台时调用onMessageReceived。当应用程序在后台时,它不会被调用

  • 我从控制台向我的应用程序发送消息,当它在后台时,我设法让应用程序做出我想要的反应。所以基本上SDK会显示一个通知,当用户点击它并启动应用程序时,我会使用一些自定义数据字段来构建对话框消息。

  • 我在我的android应用程序中使用FCM来管理消息推送。当应用程序在前台并且应用程序图标也可见(正确)时,它完全正常工作。但是当应用程序在后台运行时,我没有正确收到通知。它显示白色方形图标作为通知图标,而不是透明图标。我知道,FCM会自动处理后台操作。但是我需要显示我的应用程序图标而不是那个白色图标。注意:我只使用透明图标。我还尝试了下面的编码 但是没有一个解决方案对我有效。有人能告诉我该怎么做

  • 我正在从google firebase为我的android应用程序发送推送通知,目标是Android5.0: 我的推送通知代码是: 但为什么?这就像当应用程序在后台时,通知不使用活动代码中的设置,而只使用AndroidManifest中的某种“默认”设置。