0

iOS 用の最新の Google Cast SDK (バージョン 3.1.1.10003) を使用しており、アプリは Google Cast デバイスをリモート コントロールしています。たとえば、音量を変更します。アプリがバックグラウンドになったときもそうする必要があります。

ただし、アプリがバックグラウンドになるとGCKSessionManager呼び出されます。suspendSessionWithReason:これは、セッションが中断されるため、アプリがそれを制御できなくなることを示しています。

GCKSessionManagerアプリがバックグラウンドになったときにセッションを中断しないようにするにはどうすればよいですか?

編集:以下の解決策を提供していますが、再接続時に大幅な遅延が発生するため、ユーザーフレンドリーではありません。

4

2 に答える 2

3

アプリがバックグラウンドに移行すると Google Cast SDK が呼び出さGCKSessionManager.suspendSessionWithReasonれるため、解決策の 1 つは、このメソッドを別の実装に置き換えて、その理由を確認.AppBackgroundedし、実際には呼び出しを無視することです。

その後、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 では、セッションをバックグラウンドで維持する新しいオプションがあります。

于 2016-08-11T13:46:24.900 に答える