gpt4 book ai didi

android - 前台通知 android 未显示(奥利奥)

转载 作者:搜寻专家 更新时间:2023-11-01 08:22:50 27 4
gpt4 key购买 nike

当应用程序位于前台时,我正在尝试使用 firebase 显示通知。当我从服务器推送通知时调用了 onMessageReceived 方法,但是通知没有显示

这里是我的代码:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
Timber.d("FCM-From: " + remoteMessage.getFrom());

new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
if (remoteMessage.getNotification() != null) {
Timber.d("FCM-Message Notification Body: " + remoteMessage.getNotification().getBody());

NotificationCompat.Builder builder = new NotificationCompat.Builder(
getApplicationContext(), "CHANNEL_NOTIF")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("test")
.setContentText("test content");
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (manager != null) {
Timber.d("FCM-Notif");
manager.notify(1, builder.build());
}
}
}
});
}
}

在我的 logcat 中我可以看到:

FCM-Message Notification Body: 202018105166

FCM-From: 1049809400953

FCM-Notif

我关注了https://developer.android.com/training/notify-user/build-notification.html#builder

我在吃奥利奥

解决方案

在这里找到答案:Android foreground service notification not showing

这是奥利奥问题,感谢@Yashaswi N P

最佳答案

这是因为 Android Oreo 和更高的 API 级别。因此,您必须在 Android 8.0 及更高版本上发布任何通知之前创建通知 channel ,您应该在应用启动后立即执行此代码。重复调用此方法是安全的,因为创建现有通知 channel 不会执行任何操作。

并使用下面的代码来解决这个问题:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();
private NotificationUtils notificationUtils;
private String title,message,click_action;
private String CHANNEL_ID = "MyApp";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {

try {
JSONObject data = new JSONObject(remoteMessage.getData());
} catch (JSONException e) {
e.printStackTrace();
}
}

// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
title = remoteMessage.getNotification().getTitle(); //get title
message = remoteMessage.getNotification().getBody(); //get message
click_action = remoteMessage.getNotification().getClickAction(); //get click_action

Log.d(TAG, "Notification Title: " + title);
Log.d(TAG, "Notification Body: " + message);
Log.d(TAG, "Notification click_action: " + click_action);

sendNotification(title, message,click_action);
}
}

private void sendNotification(String title,String messageBody, String click_action) {
Intent intent = new Intent(this, TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.logo_heart)
.setContentTitle(title)
.setContentText(messageBody)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent)// Set the intent that will fire when the user taps the notification
.setAutoCancel(true);

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

// notificationId is a unique int for each notification that you must define
notificationManager.notify(1, mBuilder.build());

createNotificationChannel();
}

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.app_name);
String description = getString(R.string.description);
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance or other notification behaviors after this
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}

}

关于android - 前台通知 android 未显示(奥利奥),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48701311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com