首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我应该如何从通知返回到没有新意图的活动

我应该如何从通知返回到没有新意图的活动
EN

Stack Overflow用户
提问于 2013-08-25 10:32:27
回答 5查看 16.8K关注 0票数 22

在Android开发中,我通过示例代码实现了一个简单的通知,但在我的应用程序中,我不想重新创建新的意图和活动,我只想返回到我的上一个活动(这是一个mediaplayer UI)。如果我使用示例代码,它将通过以下方式创建一个新的活动

代码语言:javascript
复制
Intent resultIntent = new Intent(this, ResultActivity.class);

我评论了关于新意图的相关代码,并收到了通知,但不知道如何返回到我的上一次活动……

从长按Home键回到我的应用程序,触摸我的应用程序是OK的。我想要的就是这样的行为。

bleow是Android Development的示例代码,我注释新的intent部分。

代码语言:javascript
复制
NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Hello World!");
/*Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
    stackBuilder.getPendingIntent(
        0,
        PendingIntent.FLAG_UPDATE_CURRENT
    );
mBuilder.setContentIntent(resultPendingIntent);*/
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(mId, mBuilder.build());

更新

我想我需要为活动设置意图和属性的标志。因此,对于我想要返回的活动,我设置

代码语言:javascript
复制
android:launchMode="singleInstance"

因为我不想要来自intent的新活动,我只想要我的最后一个活动,所以我添加了

代码语言:javascript
复制
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

从文档中我了解到,使用Pendingintent.contentIntent必须包括FLAG_ACTIVITY_NEW_TASK标志,并且当使用此标志时,如果您正在启动的活动的任务已经在运行,则不会启动新的活动;相反,当前任务将简单地带到屏幕的前面,并显示其上一次所处的状态。所以我还补充说

代码语言:javascript
复制
Intent.FLAG_ACTIVITY_NEW_TASK

但在logCat中,我仍然看到,当我触摸返回活动的通知时,挂起的i仍然调用onCreate()函数,而不仅仅是显示仍然“活动”的最后一个活动。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-25 15:40:40

如果你想从后台调用Activity,尝试这样做:

代码语言:javascript
复制
    Intent intent = new Intent(this, YourLauncherActivity.class);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

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

如果你点击通知,而在主屏幕上,最后显示的活动,你的应用程序将得到前台,而不是启动它的新。如果该活动被系统终止,您将获得一个新的活动。

票数 46
EN

Stack Overflow用户

发布于 2016-06-07 13:42:57

我使用了PendingIntent.getActivities而不是getActivity。这在我的项目中运行得很好。

代码语言:javascript
复制
Intent backIntent = new Intent(this, HomeActivity.class);
                backIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent notificationIntent = new Intent(this, NextActivity.class);

                final PendingIntent pendingIntent = PendingIntent.getActivities(this, 1,
                        new Intent[] {backIntent, notificationIntent}, PendingIntent.FLAG_ONE_SHOT);
票数 3
EN

Stack Overflow用户

发布于 2018-01-25 21:18:26

对我来说,这是可行的:

新建意图(context( context,0,

(context,YOUR_MAIN.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |PendingIntent.getActivity ),PendingIntent.FLAG_ONE_SHOT)) FLAG_ONE_SHOT :不创建两次(关联Intent.FLAG_ACTIVITY_CLEAR_TOP |context)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18425108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档