【问题标题】:Start Activity without bringing Application to front在不将应用程序置于前面的情况下启动 Activity
【发布时间】:2011-10-07 03:11:03
【问题描述】:

我正在为我的媒体播放器更换锁屏,但我在某个方面遇到了问题。

锁定屏幕本身是我的媒体服务在屏幕关闭时启动的新活动。问题是 Activity 使用应用程序上下文来启动,这导致它在用户解锁后将应用程序带到前面。

我曾尝试使用服务上下文来启动活动,但我认为这不起作用,因为服务本身已链接到应用程序。

以下是启动活动的服务中的代码:

Intent mLock = new Intent(context, LockScreen.class); 
mLock.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mLock);

有人对我如何启动此活动并将我的应用程序保持在后台有任何建议吗?

【问题讨论】:

    标签: android service android-context


    【解决方案1】:

    在清单中设置锁屏的任务亲和性。这应该在不使用 FLAG_ACTIVITY_MULTIPLE_TASK 的情况下解决您的问题。

    【讨论】:

    • 虽然这在某些情况下有效(用户按下主页按钮),但在其他方面却失败了。我有一个调用完成()的方法;到活动,但这仍然将我的主要应用程序拉到前面。我通过将 android:taskAffinity="" 添加到清单中的活动来申请。
    • 检查一下!我将标注添加到错误的活动中。你能解释一下为什么这是一个比使用标志更好的解决方案吗?
    • 只是因为 SDK 文档建议不要使用 FLAG_ACTIVITY_MULTIPLE_TASK。如果有其他后果,我会担心使用它。
    • 如果使用亲和力,您将在最近的应用程序中看到我们的应用程序。但它工作正常。
    【解决方案2】:

    经过大量搜索,我能够通过添加FLAG_ACTIVITY_MULTIPLE_TASK 获得我想要的结果。这允许锁定活动开始和结束,而无需将父应用程序置于最前面。

    我将继续测试此解决方案并发布我发现的任何缺点。如果其他人想对此发表意见,请随意...我知道这面旗帜过去曾招致批评。

    谢谢, 乔什

    【讨论】:

    • 乔希,我知道这是一个有点老的帖子......但你介意分享让你工作的最终代码吗?您是否在没有应用上下文的情况下开始了您的活动?还是 FLAG_ACTIVITY_MULTIPLE_TASK|FLAG_ACTIVITY_NEW_TASK?
    【解决方案3】:

    我对你的问题有点不清楚。但我希望我做对了。

    如果您想激活锁定活动并且当它被解锁时您不想看到在锁定活动被调用之前正在运行的活动(比如活动 X),那么在调用之前关闭这个活动(X)锁定活动。

    如果您希望 X 在锁定活动处于活动状态时运行,但在解锁时关闭,则使用标志。解锁后设置一个标志,并允许 X 定期检查此标志状态。

    希望我能帮到你。

    【讨论】:

    • 感谢您的建议。我想做的是在解锁后屏幕关闭时将任何活动保持在顶部。这是我的媒体播放器还是其他应用程序。现在,当 Lock 活动开始时,解锁活动总是将我的应用拉到顶部
    • 如果您还没有解决它,请发布一些代码。可能会有帮助!
    • 我没有用你的解决方案解决,但这并不是说它不起作用。如果可能的话,我宁愿找到一种不使用我的应用程序上下文来启动活动的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多