【发布时间】:2014-08-07 06:24:03
【问题描述】:
我有一个简单的任务 - 通过推送特定活动(而不是启动活动)激活应用
成像我在应用中有 3 个活动:
- A(飞溅)
- B(项目列表)
- C(所选项目详情)
一些先决条件:
- 通过 push 我得到要选择的项目的 ID。
- 在启动时,我正在强制进行身份验证。
- 其中一个条件 - 例如,我无法将身份验证移动到另一个活动或应用程序服务。
现在我可以创建多个语句。当我点击推送激活应用程序时:
- 当推送到达时,PushIntentService 会生成一个通知,在 Intent extras 中指定项目 ID 如果应用程序被终止,我应该从活动 A 启动应用程序(强制身份验证)
- 如果应用在后台运行(在后台运行),我应该在同一个地方重新激活它(以跳过重新身份验证)
- 激活应用后,我将导航到 Activity C,其中项目 id 从 extras 中获取。
现在我正在使用以下代码生成通知(第 1 项,Xamarin.Android 语法):
var resultIntent = new Intent(Application.Context, typeof(SplashScreen));
resultIntent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
if (extras.ContainsKey("ItemId"))
{
var itemId = extras["ItemId"];
resultIntent.PutExtra("ItemId", itemId);
}
var resultPendingIntent = PendingIntent.GetActivity(Application.Context, 0, resultIntent, 0);
builder.SetContentIntent(resultPendingIntent);
var notification = builder.Build();
此通知在所有情况下都可以正常工作,但我在这里看到了一个问题。 每次点击通知时,我都会从一开始就重新启动应用程序。 我想要的是当应用程序在后台运行时,我只需要激活它(就像 iOS 那样)并导航到所需的页面(更快地激活并避免重新验证)。
我怎样才能做到这一点并修改上面的代码?
【问题讨论】:
-
根据我的想法,您需要使用标志,我的意思是当您的应用程序打开时,然后在应用程序关闭时使其为真,使其为假并将该标志保留在共享首选项中,这样当您收到通知时检查 flag 的值是否为真,如果为假则跳过该步骤,然后继续进行身份验证,其非常简单的逻辑希望它对您有用
-
不幸的是,我必须在不检查应用程序是否正在运行的情况下做出决定。因为它可以在我们生成该通知时打开,它可以在我们生成之后和我们打开应用程序之前关闭
标签: android android-intent android-activity push-notification back-stack