当应用未打开时显示抬头通知

时间:2017-09-25 02:58:37

标签: android firebase firebase-cloud-messaging

我使用fcm和抬头通知将在应用程序打开时显示但在应用程序未打开或终止时不显示。 应用程序未打开时如何处理抬头通知?

2 个答案:

答案 0 :(得分:1)

医生说:

  

使用Android 5.0(API级别21),通知可以显示为小型   设备时浮动窗口(也称为抬头通知)   处于活动状态(即设备已解锁且其屏幕已打开)。   这些通知看起来类似于您的紧凑形式   通知,但提前通知也显示行动   纽扣。用户可以在没有的情况下采取或解除提前通知   离开当前的应用程序。

根据文档,如果您需要单挑通知,则必须按照以下方式创建自己的通知:

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]);

不要滥用抬头通知。有关何时使用抬头通知,请参阅here

  

MAX:用于提醒用户注意的重要和紧急通知   条件是时间关键的或需要在它们之前解决   可以继续执行特定任务。

     

高:主要用于重要的通信,例如消息或聊天   具有对用户特别感兴趣的内容的事件。   高优先级通知会触发抬头通知显示。

来自HERE

的补充说明

更新:

覆盖GCM侦听器服务:

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

FCM将是:

<intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>

然后覆盖方法:

GCM:

public class MyGcmListenerService
        extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
    ... create your heads-up notification here.
}

FCM:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */    
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
    ... create your heads-up notification here.
}

答案 1 :(得分:1)

无法在评论中发帖,所以在这里。试试这个,我测试过:

private void test() {
    Intent intent;
    intent = new Intent(this, SplashScreenActivity.class);
    Bundle bundle = new Bundle();
    bundle.putBoolean("isDisplayAlert", true);
    bundle.putString("NOTIFICATION_DATA", "data");
    intent.putExtras(bundle);
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),
            new Random().nextInt(), intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_location)
            .setContentTitle("Title")
            .setContentText("Body")
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setOnlyAlertOnce(true)
            .setFullScreenIntent(pendingIntent, true);

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

    notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
    notificationBuilder.setVibrate(new long[0]);
    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}