【问题标题】:Create new intent in background在后台创建新意图
【发布时间】:2015-07-17 03:30:01
【问题描述】:

我正在寻找一种从我的应用程序中启动另一个应用程序的方法,但这样焦点不会从我的应用程序转移到启动的应用程序。

即,目前我通过意图启动了新应用程序,但是当执行此操作时,新应用程序启动并成为视图中的应用程序,我需要将其保留在后台,而我的应用程序仍在视图中。

这是什么原因? 我正在开发一个内部使用的应用程序,它的作用就像设备的锁屏一样,所以虽然事情必须在后台发生,但“锁屏”必须始终位于顶部。

我对意图和启动其他应用程序进行了一些研究,但找不到任何我需要的东西。

希望你能帮忙谢谢!

目前终端是这样调用的:

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setComponent(new ComponentName("jackpal.androidterm", "jackpal.androidterm.RemoteInterface"));
    intent.setAction("jackpal.androidterm.RUN_SCRIPT");
    intent.putExtra("jackpal.androidterm.iInitialCommand", cmdString);

它需要在后台运行的原因是应用程序可以在终端中运行命令,而无需用户访问,但随后他们“解锁”了他们需要的屏幕,然后才能查看终端和哪些命令正在运行等

【问题讨论】:

  • 这个项目可能是一个起点。它还描述了有关 Android 版本的变化,并提到了为较新的 Android 版本实现锁屏功能的应用程序。你可能想看看。 code.google.com/p/mylockforandroid
  • 谢谢你会调查这个
  • @ZacPowell。我有同样的问题。你是怎么解决这个问题的?

标签: android android-intent


【解决方案1】:

你不能在后台启动Activity。而是使用moveTaskToBack(true);启动活动并最小化活动(在你的情况下,这个活动是不同的应用程序)

在您的情况下,根据您的意图及其参数设置一个条件并使用moveTaskToBack(true);,以便只有在您的应用程序启动时才会最小化活动。

【讨论】:

    【解决方案2】:

    这是不可能的,您必须启动一个后台 Service 来执行实际工作,并且只有在您的前台 Activity 完成后才启动您想要导航到的 Activity。根据您的架构,您可以存储 Activity 以在前台 Activity 完成时调用并从服务中更改它。这样你就可以有你想要的行为,而不必实际调用Activity

    【讨论】:

    • 我需要在后台启动的活动是终端窗口 (github.com/jackpal/Android-Terminal-Emulator/wiki),因此锁屏将始终位于顶部(至少在解锁之前),但终端需要在其中运行背景。
    • 好的,你需要解释一下为什么Activity必须在后台启动。如果用户看不到 UI,那么使用 Activity 确实没有意义
    • 我敢肯定,即使没有自定义启动器(考虑到它是“内部使用的应用程序”,这可能仍然适合")。
    • 我已经添加了activity当前的调用方式,终端需要运行并准备好使用。
    • 我认为这是处理这种情况的错误方法。如果应用程序想要运行用户不应该看到(或操作)的命令,那么它绝对不应该使用任何Activity 的 UI 输入它们。您应该跳过 UI 层并直接调用生成的方法。如果你对那个方法死心塌地,你可能应该看看@421 和@ZacPowell 提到的方法
    【解决方案3】:

    除了@Meher 的回答,在您当前开始活动的意图中,您可以添加标志 FLAG_FROM_BACKGROUND。 有了这个,您就可以摆脱“闪烁”效果(您的活动在发现是否要进入后台时显示几分之一秒的效果)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多