单击“通知Android”启动活动

时间:2018-05-25 03:01:33

标签: android push-notification notifications onesignal

我正在使用Onesignal服务将通知推送到我的应用。每当我点击通知时,我都会将应用设置为打开特定活动AboutActivity.class。问题是当应用程序在后台运行并且我点击通知时,应用程序会将我带到MainActivity.class,而不是AboutActivity.class的预期活动。如果应用程序在后台运行NOT,我点击通知,它可以正常工作并打开预期的活动。我的问题是如何让应用程序打开预期的活动,即应用程序在后台运行AboutActivity.class天气(恢复应用程序)。这是我的代码

MyNotificationExtenderService

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v4.app.NotificationCompat;
import android.util.Log;

import com.onesignal.NotificationExtenderService;
import com.onesignal.OSNotificationDisplayedResult;
import com.onesignal.OSNotificationReceivedResult;

import java.math.BigInteger;


public class MyNotificationExtenderService extends NotificationExtenderService {
@Override
protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {
    OverrideSettings overrideSettings = new OverrideSettings();
    overrideSettings.extender = new NotificationCompat.Extender() {
        @Override
        public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
            // Sets the background notification color to Red on Android 5.0+ devices.
            Bitmap icon = BitmapFactory.decodeResource(MyApplication.getContext().getResources(),
                    R.drawable.ic_stat_onesignal_default);
            builder.setLargeIcon(icon);
            return builder.setColor(new BigInteger("FF0000FF", 16).intValue());
        }
    };

    OSNotificationDisplayedResult displayedResult = displayNotification(overrideSettings);
    Log.d("OneSignalExample", "Notification displayed with id: " + displayedResult.androidNotificationId);

    return true;
}
}

MyNotificationReceivedHandler

import android.util.Log;

import com.onesignal.OSNotification;
import com.onesignal.OneSignal;

import org.json.JSONObject;



public class MyNotificationReceivedHandler  implements OneSignal.NotificationReceivedHandler {
@Override
public void notificationReceived(OSNotification notification) {
    JSONObject data = notification.payload.additionalData;
    String notificationID = notification.payload.notificationID;
    String title = notification.payload.title;
    String body = notification.payload.body;
    String smallIcon = notification.payload.smallIcon;
    String largeIcon = notification.payload.largeIcon;
    String bigPicture = notification.payload.bigPicture;
    String smallIconAccentColor = notification.payload.smallIconAccentColor;
    String sound = notification.payload.sound;
    String ledColor = notification.payload.ledColor;
    int lockScreenVisibility = notification.payload.lockScreenVisibility;
    String groupKey = notification.payload.groupKey;
    String groupMessage = notification.payload.groupMessage;
    String fromProjectNumber = notification.payload.fromProjectNumber;
    String rawPayload = notification.payload.rawPayload;

    String customKey;

    Log.i("OneSignalExample", "NotificationID received: " + notificationID);

    if (data != null) {
        customKey = data.optString("customkey", null);
        if (customKey != null)
            Log.i("OneSignalExample", "customkey set with value: " + customKey);
    }
}
}

MyNotificationOpenedHandler

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.onesignal.OSNotificationAction;
import com.onesignal.OSNotificationOpenResult;
import com.onesignal.OSNotification;
import com.onesignal.OneSignal;

import org.json.JSONObject;


 public class MyNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
// This fires when a notification is opened by tapping on it.
private Context mContext;
public MyNotificationOpenedHandler (Context context) {
   mContext = context;
}
  @Override
  public void notificationOpened(OSNotificationOpenResult result) {
    OSNotificationAction.ActionType actionType = result.action.type;
    JSONObject data = result.notification.payload.additionalData;
    String launchUrl = result.notification.payload.launchURL; // update docs launchUrl

    String customKey;
    String openURL = null;
    Object activityToLaunch = AboutActivity.class;

    if (data != null) {


        Intent intent = new Intent(mContext, (Class<?>) activityToLaunch);
        intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("openURL", openURL);
        Log.i("OneSignalExample", "openURL = " + openURL);
        mContext.startActivity(intent);

    }}
}

当然还有 MainActivity

中的初始化部分
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    OneSignal.startInit(this)
            .setNotificationReceivedHandler(new MyNotificationReceivedHandler())
            .setNotificationOpenedHandler(new MyNotificationOpenedHandler(this))
            .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
            .unsubscribeWhenNotificationsAreDisabled(true)
            .init();

0 个答案:

没有答案