简体   繁体   English

如何将通知点击操作应用于android中的特定活动?

[英]How to apply notification tap action to specific activity in android?

Android: How to bind Notification action to activity Dynamically in Android Manifest file? Android:如何在Android Manifest文件中动态地将通知操作绑定到活动?

Specially for fire-base integration. 特别适用于火基集成。 Please give suggestion.Thank you 请给出建议。谢谢

Recive Custom Message in Notification And According to KeyWork True Or false Or Your Specific Word go to Activity public class MyFirebaseMessagingService extends FirebaseMessagingService { 在Notification中根据KeyWork重新发送自定义消息True或false或您的特定Word转到Activity public class MyFirebaseMessagingService扩展FirebaseMessagingService {

private static final String TAG = "FirebaseMessageService";
Bitmap bitmap;

 /**
 * Called when message is received.
 *
 * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
 */
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // There are two types of messages data messages and notification messages. Data messages are handled
    // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
    // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
    // is in the foreground. When the app is in the background an automatically generated notification is displayed.
    // When the user taps on the notification they are returned to the app. Messages containing both notification
    // and data payloads are treated as notification messages. The Firebase console always sends notification
    // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options
    //
    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
    }

    // Check if message contains a notification payload.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

    //The message which i send will have keys named [message, image, AnotherActivity] and corresponding values.
    //You can change as per the requirement.

    //message will contain the Push Message
    String message = remoteMessage.getData().get("message");
    //imageUri will contain URL of the image to be displayed with Notification
    String imageUri = remoteMessage.getData().get("image");
    //If the key AnotherActivity has  value as True then when the user taps on notification, in the app AnotherActivity will be opened. 
    //If the key AnotherActivity has  value as False then when the user taps on notification, in the app MainActivity will be opened. 
    String TrueOrFlase = remoteMessage.getData().get("AnotherActivity");

    //To get a Bitmap image from the URL received
    bitmap = getBitmapfromUrl(imageUri);

    sendNotification(message, bitmap, TrueOrFlase);

}


/**
 * Create and show a simple notification containing the received FCM message.
 */

private void sendNotification(String messageBody, Bitmap image, String TrueOrFalse) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("AnotherActivity", TrueOrFalse);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setLargeIcon(image)/*Notification icon image*/
            .setSmallIcon(R.drawable.firebase_icon)
            .setContentTitle(messageBody)
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(image))/*Notification with Image*/
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

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

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

This is AnotherActivity 这是AnotherActivity

    // If a notification message is tapped, any data accompanying the notification
    // message is available in the intent extras. In this project the launcher
    // intent is fired when the notification is tapped, so any accompanying data would
    // be handled here. If you want a different intent fired, set the click_action
    // field of the notification message to the desired intent. The launcher intent
    // is used when no click_action is specified.
    //
    // Handle possible data accompanying notification message.
    if (getIntent().getExtras() != null) {

        for (String key : getIntent().getExtras().keySet()) {
            String value = getIntent().getExtras().getString(key);

            if (key.equals("AnotherActivity") && value.equals("True")) {
                Intent intent = new Intent(this, AnotherActivity.class);
                intent.putExtra("value", value);
                startActivity(intent);
                finish();
            }

        }
    }

This is The Data 这是数据

{ "data": {
    "image": "https://ibin.co/2t1lLdpfS06F.png",
    "message": "Firebase Push Message Using API"
    "AnotherActivity": "True"
  },
  "to" : "f25gYF3***********************HLI"
}

To achieve the functionality of opening an activity, upon receiving of notification, that activity should be given intent-filter in manifest, to listen for an action. 为了实现打开活动的功能,在接收到通知时,应该在清单中给予该活动intent-filter ,以监听动作。

In the Notification, along with the payload, the action which the activity listens for, should be sent. 在通知中,应与有效负载一起发送活动侦听的操作。 In the Receiver, an Intent with such an action can be fired, which opens the activity, Even if app is in backgroud or closed. 在Receiver中,可以触发具有此类操作的Intent ,即使app处于backgroud或关闭状态,也会打开该活动。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM