如何根据意图的数据

时间:2016-05-24 14:01:56

标签: android android-intent

我正在制作一个实际上包含两项活动的应用程序。

一个将允许用户登录,如果成功完成将启动Web浏览器(MenuActivity)。 另一张照片并将其上传到服务器(PhotoActivity)。

该网络浏览器将有一个链接,当按下该链接时,我将以图片拍摄模式加载我的应用程序。

流程通常是这样的: MenuActivity-> web浏览器 - > PictureActivity,然后重复最后两个步骤。

到目前为止,我通过将我的启动器活动设置为MenuActivity,然后将此代码放在OnCreate覆盖中来完成此操作:

Intent mine = getIntent();
if (mine.getData() != null && !mine.getData().getPathSegments().isEmpty()) {
    //retrieve the data here that I need
    Intent i = new Intent(this, typeof(PhotoActivity));
    i.PutExtra(//add here the data I received);
    StartActivityForResult(i, START_PHOTO_INTENT);
}

之后我重写OnActivityResult并发送finish(),如果requestCode是START_PHOTO_INTENT

这可以正常使用

我的问题是,当我从网络浏览器启动PhotoActivity时,如果用户(当它打开时)打开应用程序,则MenuActivity显示(它应该)但当用户按下它时,它会进行回到PhotoActivity而不是退出。

是否有办法更改此行为,以便即使PhotoActivity已打开,如果手动启动应用程序,PhotoActivity也不会保留在backstack上?

提前感谢您提供的任何帮助

编辑:

在阅读了解决方案中的链接文章和这个问题的答案后,我得出的结论是,为了做我想做的事情,我必须在androidmanifest中将LaunchMode设置为singleTask,并覆盖MenuActivity的OnStop并发送finish()之后它被执行了(如果我没有,并且活动在backstack中,那么当从网页启动时,它不会被意图数据触发)

感谢所有人的帮助

2 个答案:

答案 0 :(得分:1)

查看Tasks and Back Stack文档中的Handling affinities章节。它描述了如何处理这个问题。

答案 1 :(得分:0)

请做

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

这将为您的应用程序启动一项新任务