应用程序被杀时,应用程序从通知中启动活动时退出

时间:2017-02-08 06:24:48

标签: android notifications

我需要创建通知,它可以正常使用下面给出的代码。当我点击通知时,它会重定向到一个活动,比如activity2。我可以从其他活动或片段输入此活动2,例如activity1,fragment1等。当我停留在应用程序上并单击通知时,它将重定向到activity2,而当我按下后退按钮时它将转到上一个活动或分段。但是,如果我终止应用程序并单击通知,它将打开activity2,但在按下后退按钮时,应用程序将退出。我需要将它重定向到activity1。我该怎么做。 提前谢谢。

    void createDownloadNotification(String title) {
    if (title != null) {
        Intent intent = new Intent(context, SecondActivity.class);
        intent.putExtra(EXTRA_STRING, title);
        intent.putExtra("id", i);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), intent, 0);




        Notification myNotification = new Notification.Builder(context)
                .setContentTitle(title)
                .setContentText("Some text....")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentIntent(pIntent)
                .setAutoCancel(false).build();


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

        notificationManager.notify(i + 1, myNotification);
        i = i + 1;

    }
}

5 个答案:

答案 0 :(得分:0)

在清单中试用此代码

<activity
    android:name="com.example.myfirstapp.DisplayMessageActivity"
    android:label="@string/title_activity_display_message"
    android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myfirstapp.MainActivity" />
</activity>

答案 1 :(得分:0)

基本上,您需要在清单文件中设置父活动,并为生成的活动创建堆栈。&#39;

这是非常好的tutorial让你开始。

答案 2 :(得分:0)

按照此处的定义工作:FLAG_ACTIVITY_CLEAR_TOP

  

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。

您在PendingIntent中填写通知的意图,关闭所有未结Activities并打开SecondActivity。如果您从Intent删除该标记,则不会关闭其他标记。

除此之外,您可以将父Activity添加到SecondActivity,以便在用户按下时知道该去哪里,并且在点击通知之前没有打开任何内容。

答案 3 :(得分:0)

根据您当前的实现和intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);部分,有问题的行为是按设计进行的。理解tasks and backstacks可以解释这一点。

您可能希望启动onBackPressed activity2条件的活动,检测通知何时到达,同时如果活动不存在则重新创建通知。

通过activity launch modes会有所帮助。您可以将activity1@Bind(R.id.checkAnswerBtn) Button checkAnswerBtn; @Bind(R.id.mainPlayBtn) ImageButton mainPlayBtn; protected void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activitylayout); ButterKnife.bind(this); ... } @OnClick(R.id.checkAnswerBtn) void onCheckAnswerBtnClicked() { mainPlayBtn.performClick(); } @OnClick(R.id.mainPlayBtn) void onMainPlayBtn() { Log.e(TAG, "playing"); } 一起用于实施。

Understand android activity launchmode是一篇很好的博客文章,是这个答案中唯一的非Android开发者链接。

答案 4 :(得分:0)

简单方法

通过你用来进入activity2的意图传递bool

来自通知然后传递bool true

从开放活动然后传递bool false

并在活动2中获取bool值并相应地设置

之后在活动2中将onBackPressed设置为

 @Override
    public void onBackPressed() {
        if (fromNotification) {
            Intent i = new Intent(Activity2.this,
                    Activity1.class);
            startActivity(i);
            finish();
        } else
            super.onBackPressed();
    }