【问题标题】:Android Launching or bringing to front another application via IntentAndroid 通过 Intent 启动或将另一个应用程序置于前面
【发布时间】:2011-02-03 22:29:18
【问题描述】:

我无法让它工作,这里是这个想法的快速概述。

首先,我无法更改这背后的逻辑,这是客户的特定要求,我意识到使用 AnyCut 之类的任何工具都可以绕过它,但这并不重要。

我的客户提供了一套应用程序,其想法是所有属于该套件的应用程序都将从“仪表板应用程序”启动,因此我只在主启动器中显示仪表板应用程序,而不是所有应用程序图标。

让我们用两个应用程序来解决这个想法。仪表板应用 (A) 和接收应用 (B)。

我想在应用程序 B 上建立一个意图过滤器(我认为),这样每当我进入应用程序 A 并单击应用程序 B 图标时,应用程序就会启动或从它放开的位置启动(带到前面) .

这甚至可能吗?如果是这样,我该怎么做?我设法通过在应用程序中专门启动一项活动来启动它:

Intent i = new Intent();
i.setClassName("PACKAGE_NAME","SPECIFIC_CLASS");
startActivity(i);

但这不是我想要的行为,因为它总是在同一个位置启动应用程序 B。

提前谢谢, 斯特凡诺

编辑:添加了一些新信息。我正在查看 DDMS。

如果我通过主 Android 启动器从头开始启动应用程序,则意图与我按下主页按钮然后只将应用程序置于前面时完全相同,无论我在做什么活动。所以我试图重现,直到现在都没有成功,这个意图。

INFO/ActivityManager(1292): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.package/.uiPackage.Activity}

AnyCut 就是这样做的

Intent { act=android.intent.action.VIEW flg=0x10000000 cmp=com.example.package/.uiPackage.Activity bnds=[125,242][235,360]}

知道如何创建完全相同的意图吗?我什至无法在 Intent API 中找到该标志。

【问题讨论】:

    标签: android android-intent launch intentfilter


    【解决方案1】:

    想通了,我就是这样做的。

    Intent i = new Intent();
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.setAction("android.intent.action.VIEW");
    i.setComponent(ComponentName.unflattenFromString("com.example.package/com.example.package.activityName"));
    startActivity(i);
    

    【讨论】:

    • 这很有趣。这实际上会带您回到从主要应用程序(仪表板)启动的辅助应用程序中停止的位置吗?如果是这样,这是个好消息!
    • @ice911 它完全符合您的描述,似乎 android 将应用程序拉到原来的状态。我在模拟器、nexus one、g2和galaxy tab上测试了它,它适用于所有这些。 activityName im 指的是 Manifest 中标记为 main 的那个。
    • 太棒了。像魅力一样工作。
    • 也适用于 PendingIntents,例如通知:PendingIntent.getActivity(context, 0, i, 0)
    • @blindstuff 我正在发送带有意图的数据,但无法在第二个应用程序上获取意图数据。有什么,我失踪了。
    【解决方案2】:

    我不太确定我是否遵循了您希望看到的预期结果,但以下操作会从仪表板启动应用程序并从活动堆栈中删除仪表板,使所选应用程序继续运行:

    Intent i = new Intent();
    i.setClassName("PACKAGE_NAME","SPECIFIC_CLASS");
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
    

    我相信这应该像启动任何其他应用一样启动应用。

    如果这不是您要查找的内容,请添加有关您的逻辑的更多信息。

    【讨论】:

    • 不完全是我想要的对不起,我不想指定我要打开的类,而只是在它停止的任何活动中调用另一个应用程序。
    • 我希望用户能够使用该应用程序,但例如当他单击主页时,然后返回仪表板并继续使用原来的应用程序。
    • rather just invoke the other app in what ever activity it left off android 并不是这样工作的
    • 为了做到这一点,我相信你必须打破很多规则,但这是可能的。我想不出比将您的意图中的额外内容传递回仪表板以保存您的位置更优雅的方法了。使用 startactivityforresult() 并传回活动名称是可行的,但您可能需要更多逻辑才能将用户置于他们离开的同一位置。我会保留从仪表板产生的所有活动的历史记录,然后根据活动使用它来引用正确的位置。希望这有助于对此的思考过程。
    • @Falmarri 我看不出这如何“破坏”android 的工作方式,想法是让仪表板像 android 启动器一样。当您在一个应用程序中,然后单击主页退出,然后再次单击应用程序图标它会跳回到它所在的活动。这正是我所做的,只是我从启动器中删除了图标并将其放在仪表板中。
    【解决方案3】:

    我认为,当您切换活动时,android 的默认操作是暂停或将活动保持在用户最后离开的状态。我知道有一种方法可以在切换活动时不保存状态,但我不记得了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多