当前位置: 首页 > 面试题库 >

当应用未运行时,Android通知未显示其内容

林哲茂
2023-03-14
问题内容

这是我有趣的问题。当应用未运行时,来自GCM的Android通知未显示标题和内容( 显示应用名称,并且在单击时打开MainActivity)。

但是,当应用程序打开时,它会 成功 显示标题和内容。可能是什么问题?它运行没有问题,我没有进行任何更改。

表现:

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="com.package.xxx.permission.C2D_MESSAGE" />
    <permission android:name="com.package.xxx.permission.C2D_MESSAGE" android:protectionLevel="signature" />



    <receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.package.xxx" />
        </intent-filter>
    </receiver>

    <service
        android:name=".Service.GcmService"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </service>

GcmService.java:

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.text.TextUtils;
import android.util.Log;

import com.google.android.gms.gcm.GcmListenerService;
import com.package.xxx.Activity.ReadNormal;
import com.package.xxx.R;


public class GcmService extends GcmListenerService {

    public GcmService() {

    }

    @Override
    public void onMessageReceived(String from, Bundle data) {

        Log.d("GCMService", data.toString());

        String type = data.getString("type", "");

        if(type.equals("news")) {
           showNewsNotification(data);
        }

    }

    private void showNewsNotification(Bundle data) {

        String neId = data.getString("neId");

        if(TextUtils.isEmpty(neId)) {
            return;
        }

        int id = Integer.valueOf(neId);

        NotificationCompat.Builder mBuilder =   new NotificationCompat.Builder(this)
                .setContentTitle(data.getString("neTi"))
                .setContentText("Click to read more.")
                .setSmallIcon(R.drawable.ic_launcher)
                .setAutoCancel(true);

        Intent i = new Intent();
        i.putExtra("neSi", data.getString("neSi"));
        i.putExtra("neUr", data.getString("neUr"));
        i.putExtra("neTi", data.getString("neTi"));
        i.putExtra("neIm", data.getString("neIm"));
        i.putExtra("neId", id);
        i.setClass(this, ReadNormal.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        /***/
        PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(pi);

        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(0, mBuilder.build());

    }

    @Override
    public void onDeletedMessages() {

    }

    @Override
    public void onMessageSent(String msgId) {
    }

    @Override
    public void onSendError(String msgId, String error) {
    }

谢谢。

在应用程序运行时记录。

 D/GCMService: Bundle[{neId=4663755, neIm=http://icdn.posta.com.tr/editor/HD/30/1/2016/fft2mm7549077.jpg, neSi=Posta, neTi=Erdoğan: Rusya sonucuna katlanır, neUr=http://www.posta.com.tr/turkiye/HaberDetay/Erdogan--Rusya-sonucuna-katlanir.htm?ArticleID=324647, type=news, notification=Bundle[{e=1}], collapse_key=com.tekmobil.guncelhaber}]

应用未运行时记录。

(empty, there is no log)

问题答案:

找到了问题。我使用的是Play服务的8.4.0版本(最新)。

compile 'com.google.android.gms:play-services-gcm:8.4.0' //GCM

我将版本缩减为8.3.0。它按预期工作。



 类似资料:
  • 仅当应用程序关闭时,数据有效负载的使用不会收到任何通知,并且不会触发消息接收方法。 在下图中显示数据负载,单击此处查看参数 回复是点击这里查看回复 响应成功1,但在redmi手机中未收到任何通知。

  • 我正在创建一个应用程序,显示未来日期的通知。为了在将来显示通知,我使用了AlarmManager。 在我的一个活动中单击按钮,我会创建如下通知 以下是我的BootService类代码: 在测试应用程序时,我看到通知显示,问题是特定于启动手机。在上面的代码中,我通过调用LoadAlarmsFromDatabase来重新创建通知 为了处理启动时重新创建警报,我使用了BroadcastRecaver 公

  • 下面是我的函数的简化版本: 我没有任何特定的java代码,因为我现在只需要显示通知。有没有人想过用一种简单的方法来存档这个问题?

  • 普通通知生成器不会在Android O上显示通知。 如何在Android 8 Oreo上显示通知? 在Android O上显示通知是否需要添加新的代码?

  • 我正在发送纯FCM数据通知到一个Android客户端,它们是端到端加密的。android应用程序解密数据通知负载,并从加密的数据创建本地通知。只要应用程序在前台或后台运行,这就可以正常工作:通知负载会被接收、解密,甚至会显示在锁定屏幕上,但只有在应用程序运行的时候才可以。我还查看了消息优先级,并在通知消息的AndroidConfig成员和数据字段中将其设置为“high”(发送到FCM的应用服务器)

  • 我正在使用Firebase通知作为我的应用程序的推送通知。一切正常,但应用程序未运行时通知图标会显示白色圆圈。我的目标是SDK版本23,我还使用Roman Nurik的通知图标生成器生成透明白色图标。 当应用程序处于前台并运行时,通知图标显示正确。img 但当应用程序处于后台或被删除时,图标会被替换为通用的白色圆圈。img公司 这是我的通知生成器方法: