iOS - Reset pusat komando / pemutar jarak jauh

Saya menggunakan berbagai jenis pemutar di aplikasi saya. Saya punya semacam kendali atas semuanya, tapi ada satu yang tidak saya kendalikan sama sekali.

Saat saya memutar video tersemat dari UIWebView, khususnya.

Masalah saya adalah, aplikasi memerlukan audio untuk diputar di latar belakang, dan itu berfungsi dengan baik. Catatan, audio video tidak perlu diputar di latar belakang. Tapi itu berarti saya perlu menggunakan remote kontrol (perintah pusat perintah & layar kunci).

Masalah saya adalah sebagai berikut:

Setelah saya memutar video dari penyematan, kendali jarak jauh masih mengontrol video tersebut, meskipun sudah ditutup. Dan saat saya menekan "putar", radio saya DAN video yang disematkan akan diputar.

Bagaimana cara "menghapus memori" pusat komando?

Saya memiliki cukup informasi untuk mengetahui kapan harus menerapkan solusi, namun saya tidak tahu apa solusinya.

Solusinya dapat mencakup ketidakmampuan total untuk menggunakan pusat perintah saat memutar video yang disematkan, atau hingga radio saya diputar. Solusinya mungkin termasuk semacam "hard reset" dari pusat komando.

Sebenarnya, solusi apa pun diterima.


person Gil Sand    schedule 11.08.2016    source sumber


Jawaban (1)


Pertanyaan ini agak lama, tapi saya baru saja memperbaiki masalah ini dan merasa ini bisa membantu seseorang. Hal yang mencegah saya menyetel ulang pusat komando adalah saya telah menambahkan tindakan target yang bertahan melewati siklus hidup pengontrol tampilan saya.

Berikut tampilan kode saya.

Pada pengontrol tampilan:

var commandPlay: Any?
var commandPause: Any?

Saat menambahkan target:

commandPlay = commandCenter.playCommand.addTarget {event in
        self.startButtonTapped(self.startButton)
        MPNowPlayingInfoCenter.default().nowPlayingInfo?[MPNowPlayingInfoPropertyPlaybackRate] = 1.0
        return .success
    }

commandPause = commandCenter.pauseCommand.addTarget {event in
        self.startButtonTapped(self.startButton)
        MPNowPlayingInfoCenter.default().nowPlayingInfo?[MPNowPlayingInfoPropertyPlaybackRate] = 0.0
        return .success
    }

Pada saat pemberhentian untuk menghapus target (bagian penting):

commandCenter.playCommand.removeTarget(commandPlay)
commandCenter.pauseCommand.removeTarget(commandPause)
person joe    schedule 03.06.2020
comment
Terima kasih telah memposting ini. Ini berhasil untuk saya. Caranya adalah dengan mendeklarasikan variabel yang Anda sebutkan di atas sebagai variabel @State di Swift 5. Saya harus memodifikasi kode play/pause untuk menambahkan fungsi commandPlay/commandPause. Jangan lupa untuk mendefinisikan commandCenter di fungsi atDisappear() Anda. Saya telah melakukan beberapa pengeditan pada kode Anda. Bagus sekali. - person FontFamily; 27.05.2021
comment
Sudahlah - katanya antrian edit yang disarankan sudah penuh jadi saya tidak bisa mengedit pertanyaan Anda. Jangan lupa baris ini: let commandCenter = MPRemoteCommandCenter.shared();. Anda juga ingin berhenti menerima kejadian jarak jauh: UIApplication.shared.endRecomingRemoteControlEvents(). - person FontFamily; 27.05.2021