【问题标题】:Opening application from notification从通知打开应用程序
【发布时间】:2016-07-23 14:38:25
【问题描述】:

假设我们有一个显示有趣图片的 Activity,并将其命名为 FunnyActivity。该 Activity 可以在单击按钮后从 MainActivity 启动,它是应用程序中的基本 Activity。我们有时也想推送一些通知,当用户点击通知时,应该启动这个 FunnyActivity。所以我们添加这部分代码:

    Intent notificationIntent = new Intent(this, FunnyActivity.class);
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    PendingIntent intent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), notificationIntent, 0);

这个 PendingIntent 正在通知生成器中使用

setContentIntent(intent)

当然,FunnyActivity 启动得很漂亮,但是我们希望在用户单击 FunnyActivity 上的返回按钮时打开 MainActivity。

我们怎样才能做到这一点?请记住,当用户回到 MainActivity 时,他可以通过按钮再次打开 FunnyActivity。

【问题讨论】:

  • 我不知道标准解决方案,这听起来像是一个 hack,但是您可以做的一件事是在 FunnyActivity 中覆盖 onBackPressed() 并在那里使用适当的标志启动 MainActivity。

标签: android android-activity android-pendingintent


【解决方案1】:

试试这个:

// Intent for the activity to open when user selects the notification
Intent detailsIntent = new Intent(this, DetailsActivity.class);

// Use TaskStackBuilder to build the back stack and get the PendingIntent
PendingIntent pendingIntent =
        TaskStackBuilder.create(this)
                        // add all of DetailsActivity's parents to the stack,
                        // followed by DetailsActivity itself
                        .addNextIntentWithParentStack(upIntent)
                        .addNextIntent(detailsIntent);
                        .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(pendingIntent);

来源:Create back stack when starting the activity

【讨论】:

  • 似乎是正确的答案!但是 detailsIntent 的用途在哪里?
  • @ThirdMartian after .addNextIntentWithParentStack(upIntent)
  • @ThirdMartian 我更新了答案,'upIntent' 也是你想要在按下后打开的 MainActivity 的意图。
  • 谢谢!帮助很大(:
【解决方案2】:

你可以试试这个:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
Intent resultIntent = new Intent(this, FunnyActivity.class);

                    // Adds the back stack
                    stackBuilder.addParentStack(MainActivity.class);
                    // Adds the Intent to the top of the stack
                    stackBuilder.addNextIntent(resultIntent);

Intent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

                    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)/*.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))*/
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .setContentTitle(title)
                            .setContentText(msg)
                            .setContentIntent(resultPendingIntent)
                            .setAutoCancel(true);

这是您解决问题的方法。希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 2014-10-29
    • 2023-03-11
    相关资源
    最近更新 更多