推送通知打开一个新活动

Posted

技术标签:

【中文标题】推送通知打开一个新活动【英文标题】:Push notification open a new activity 【发布时间】:2016-10-02 11:11:30 【问题描述】:

我正在使用 OneSignal 推送通知服务。 当用户点击推送通知时,它会自动打开一个名为“Main2Activity.java”的新活动。 当用户点击通知时,代码正在工作并打开一个新的活动。但是如果我发送另一个推送通知,当用户点击通知时,应用程序首先打开“MainActivity.java”。只有当用户点击手机上的上一个按钮时,它才会打开“MainActicity2.java”。 这是我的代码

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

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

import org.json.JSONObject;

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        OneSignal.startInit(this)
                .setNotificationOpenedHandler(new ExampleNotificationOpenedHandler())
                .init();
    

    class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler 
        // This fires when a notification is opened by tapping on it.
        @Override
        public void notificationOpened(OSNotificationOpenResult result) 
            OSNotificationAction.ActionType actionType = result.action.type;
            JSONObject data = result.notification.payload.additionalData;
            String customKey;

            if (data != null) 
                customKey = data.optString("customkey", null);
                if (customKey != null) 
                    Log.i("OneSignalExample", "customkey set with value: " + customKey);
                    Toast.makeText(MainActivity.this,"My Custom Key is:"+customKey,Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
                         intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);

                    startActivity(intent);


                
            

        
    

谢谢!

【问题讨论】:

【参考方案1】:

当您从通知中打开活动时,您会输入一些数据来识别用户来自通知

当用户从 mainactivity2 按下返回按钮然后检查,用户来自通知或任何其他地方,如果来自通知则关闭应用程序。

在您的menifest.xml 中添加以下代码

<activity ..
      android:launchMode= "singleInstance" />

【讨论】:

好的,但问题是当用户点击通知时它打开了 MainActivity 然后在你的清单文件中添加这一行,android:launchMode="singleTop" 这样你的应用就不会打开多个活动实例 我不明白如何用代码做到这一点。你能帮帮我吗? 您的活动多次打开,是真的吗?? 现在可以查看了吗

以上是关于推送通知打开一个新活动的主要内容,如果未能解决你的问题,请参考以下文章

在打开推送通知时解析推送“未找到活动”

推送通知以打开特定活动

从 GCM 推送通知打开地图活动

单击推送通知时对特定活动的意图。

如何在android应用程序活动和非活动状态下处理推送通知

在活动中存储/保存收到的推送通知[关闭]