如何在应用程序转到后台时保持GCKCastSession处于活动状态

时间:2016-08-11 13:21:39

标签: ios google-cast background-mode

我使用最新的Google Cast SDK for iOS(版本3.1.1.10003),我们的应用程序是远程控制Google Cast设备,例如它改变了音量。当我们的应用程序进入后台时,它也需要这样做。

但是,当应用转到后台时,GCKSessionManager会调用suspendSessionWithReason:。这就是说,会话将被暂停,因此我们的应用程序无法再控制它。

如何在应用转到后台后让GCKSessionManager暂停会话?

修改:我在下方提供解决方案,但由于重新连接时出现严重延误,因此用户不友好。

2 个答案:

答案 0 :(得分:4)

在最新的Google Cast SDK中,您可以像options一样设置它:

 package:
  name: r-decipher
  version: "2.6.0"

source:
  git_url: https://git.bioconductor.org/packages/DECIPHER

requirements:
  build:
    - r
    - bioconductor-biostrings
    - r-rsqlite

  run:
    - r
    - bioconductor-biostrings
    - r-rsqlite
test:
test:
  commands:
    # You can put additional test commands to be run here.
    - $R -e "library('DECIPHER')"           # [not win]
    - "\"%R%\" -e \"library('DECIPHER')\""  # [win]

about:
  home: https://bioconductor.org/packages/release/bioc/html/DECIPHER.html

然而,无论如何,会话都会从丢失的网络连接中消失。诀窍是从设备播放“空”音频文件,使其保持活动状态。愚蠢认为这必须是行业标准。

答案 1 :(得分:2)

当Google Cast SDK在应用程序转到后台时调用GCKSessionManager.suspendSessionWithReason时,一种解决方案是使用不同的实现替换此方法,该实现检查原因是.AppBackgrounded然后实际忽略该调用。 / p>

然后,当应用程序转到后台时,SDK不会立即终止会话,但它仍会在稍后暂停会话。然而,会话可以从后台模式重新启动 - 但是需要花费大量时间,并且从用户的角度来看,延迟是负面的。此外,在几秒钟没有“与之交谈”之后,会议会定期暂停。

仍然非常感谢任何更好的解决方案。

extension GCKSessionManager {
    static func ignoreAppBackgroundModeChange() {
        let oldMethod = class_getInstanceMethod(GCKSessionManager.self, #selector(GCKSessionManager.suspendSessionWithReason))
        let newMethod = class_getInstanceMethod(GCKSessionManager.self, #selector(GCKSessionManager.suspendSessionWithReasonIgnoringAppBackgrounded))
        method_exchangeImplementations(oldMethod, newMethod)
    }

    func suspendSessionWithReasonIgnoringAppBackgrounded(reason: GCKConnectionSuspendReason) -> Bool {
        guard reason != .AppBackgrounded else { return false }
        return suspendSessionWithReason(reason)
    }
}

现在我们需要做的就是致电GCKSessionManager.ignoreAppBackgroundModeChange()

修改

从最新的Google Cast SDK开始,它有一个新选项可以让会话在后台保持活动状态。