我希望以与用户在启动器中点按其图标时完全相同的方式从状态栏通知中恢复我的应用.
那就是:我希望堆栈处于与用户离开之前相同的状态.
在通知上设置待处理意图时的问题是它始终以特定活动为目标.我不想要这个.我需要像启动器那样恢复应用程序.
因此,如果用户处于活动A中,我想恢复活动A.如果他已从活动A启动活动B,那么我希望在用户点击通知时显示B,并且要恢复堆栈以便A获得用户点击B中的后退按钮时恢复
还有其他几个问题与类似的标题,但没有一个解决我的问题.
我向用户发送推送通知,点击它时会打开应用程序.
我的问题是,当应用程序已经打开时,单击通知会再次启动应用程序.
我只希望它启动应用程序,如果它还没有运行.
我在通知中使用Pending Intent:
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, Splash.class), 0);
Run Code Online (Sandbox Code Playgroud)
我看到帖子说使用:
<activity
android:name=".Splash"
android:launchMode="singleTask"
Run Code Online (Sandbox Code Playgroud)
但问题是我正在运行的应用程序正在运行其他活动,然后启动应用程序启动后7秒内完成,因此当应用程序运行时,Splash不是当前活动
notifications android push-notification android-pendingintent
我有一个在后台运行的应用程序,并通过通知系统显示错误消息.此通知具有pendingIntent,可以返回应用程序的主屏幕.在这个主屏幕上,我设置了launchmode ="singleTask".正如我从Android开发指南中理解的那样,这应该意味着我的主要活动将只有一个实例.
但是,如果用户当时正在查看该活动(或应用程序中的另一个活动),然后触摸通知以清除它,它会继续并将活动的另一个副本放在堆栈上,所以如果我点击了后退按钮,它将再次返回主屏幕(从主屏幕).
为什么要这样做?
我有一个基本的问题,我不认为附加任何代码片段可能会有所帮助.当我们在应用程序位于前面时按下主页按钮时,我们转到主页,应用程序失去了焦点.
现在,我的应用程序必须在状态栏中有通知图标.就像在我的应用程序中一样,有可能显示2-3个活动(在对话视图中一个在另一个上面).在某些情况下,当我按状态栏中的通知图标时,我不确定如何恢复这种状态.
但是,当我按下主页按钮然后按主屏幕中的应用程序图标时,我得到了所有内容.
那么,有什么方法可以用通知栏图标做同样的事情.
我希望广播接收器以这种方式启动我的应用程序:
如果应用程序不在前台或后台,请将其启动,就好像它是从启动器启动一样.
如果应用程序在后台,请将其带到最后一个状态的前台.
如果应用程序位于前台,则不执行任何操作.
这是我的代码:
@Override
public void onReceive(Context context, Intent intent) {
Intent launch_intent = new Intent("android.intent.action.MAIN");
launch_intent.setComponent(new ComponentName("com.example.helloworld","com.example.helloworld.MainActivity"));
launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
launch_intent.addCategory(Intent.CATEGORY_LAUNCHER);
launch_intent.putExtra("some_data", "value");
context.startActivity(launch_intent);
}
Run Code Online (Sandbox Code Playgroud)
MainActivity是我的根活动.就像我说的,如果应用程序已经运行,我只是想把它带到前面而不改变它的状态.如果在MainActivity之上有一些活动,请保持原样.
大多数情况下上面的代码工作正常,但有时我注意到应用程序重新启动(或状态被重置 - 根回到顶部)当它从后台运行时.
我应该使用什么代码?任何帮助表示赞赏!
我已经在服务中实施了通知.通知工作正常.但是,当应用程序已经运行并且我点击了android状态栏通知时,它会启动我的应用程序的新副本.这显然是错的.应该是如果用户点击状态栏通知,应该启动应用程序,如果应用程序没有运行,否则它应该打开其他活动(在我的情况下的消息活动).我在这里发布的类似问题中尝试了很多建议,但我没有得到解决方案.
当活动中发生某些事件时,我会向用户显示一条通知。创建通知时,如果系统清除了我的活动,我会使用 TaskStackBuilder 确保我有后退堆栈活动列表。我的代码看起来像这样:
...
TaskStackBuilder builder = TaskStackBuilder.create(sContext);
builder.addNextIntent(new Intent(context, ActivityA));
builder.addNextIntent(new Intent(context, ActivityB));
builder.addNextIntent(new Intent(context, ActivityC));
PendingIntent pendingIntent =
builder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
Notification.Builder builder = new Notification.Builder(context)
.setContentTitle(title))
.setContentText(notificationText)
.setSmallIcon(getNotificationIcon())
.setContentIntent(pendingIntent);
builder.build();
...
Run Code Online (Sandbox Code Playgroud)
因此,打开的活动将是最后添加的,即 ActivityC(我不希望重新创建它)。我找到的一个解决方案是:如何使通知恢复而不是重新创建活动? 据说我不应该使用TaskStackBuilder,但这不是我想要的。我想使用 TaskStackBuilder 从通知启动一个活动,而不是重新创建整个活动。
有什么解决方案/建议吗?
notifications android android-activity android-pendingintent taskstackbuilder
例如在 WhatsApp 中。当我打电话给某人时,即使该应用程序在后台或被杀死,活动也会打开。我该如何实施?此外,我不希望我的应用程序启动新活动,因为此应用程序将在受控环境中使用。我的应用程序将始终在后台。当应用程序打开(后台或前台)时,用户将收到通知,因此当他们收到此通知时,他们的应用程序应自动应用程序(不是启动新活动),而只是将当前活动推送到前台。
为了最好地理解这就是我想要实现的:用户 A 打开应用程序,然后将其最小化。所以现在他有资格接收通知。该应用程序当前在 Activity A 上。当用户收到通知时,我们将收到的数据推送到列表中并将其显示在 Activity A 上。我想要做的就是当用户 A 收到推送通知时将 Activity A 推送到前台不要再次创建 Activity A 或任何类似的东西,而只是将其置于前台。任何帮助将非常感激。谢谢!