我需要创建通知,它可以正常使用下面给出的代码。当我点击通知时,它会重定向到一个活动,比如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;
}
}
答案 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();
}