iOS - รีเซ็ตศูนย์คำสั่ง / เครื่องเล่นระยะไกล

ฉันใช้ผู้เล่นหลายประเภทในแอปของฉัน ฉันมีอำนาจควบคุมมันทั้งหมดได้ แต่หนึ่งในนั้นฉันไม่ทำเลย

เมื่อฉันเล่นวิดีโอแบบฝังจาก UIWebView โดยเฉพาะ

ปัญหาของฉันคือ แอปต้องการให้เล่นเสียงในพื้นหลัง ซึ่งใช้งานได้ดี โปรดทราบว่าเสียงของวิดีโอไม่จำเป็นต้องเล่นเป็นพื้นหลัง แต่นั่นหมายความว่าฉันจำเป็นต้องใช้รีโมทคอนโทรล (คำสั่งศูนย์ควบคุมและหน้าจอล็อค)

ปัญหาของฉันมีดังต่อไปนี้:

หลังจากที่ฉันเล่นวิดีโอจากการฝังแล้ว รีโมทคอนโทรลยังคงควบคุมวิดีโอนั้น แม้ว่าวิดีโอนั้นจะถูกปิดไปแล้วก็ตาม และเมื่อฉันกด "เล่น" มันจะเล่นทั้งวิทยุและวิดีโอที่ฝังไว้

ฉันจะ "ล้างหน่วยความจำ" ของศูนย์บัญชาการได้อย่างไร

ฉันมีข้อมูลเพียงพอที่จะรู้ว่าเมื่อใดจึงควรใช้วิธีแก้ปัญหา แต่ฉันไม่รู้ว่าวิธีแก้ปัญหาคืออะไร

โซลูชันอาจรวมถึงการปิดการใช้งานศูนย์คำสั่งโดยสิ้นเชิงในขณะที่เล่นวิดีโอที่ฝังไว้ หรือจนกว่าวิทยุของฉันจะเล่น โซลูชันอาจรวมถึง "ฮาร์ดรีเซ็ต" ของศูนย์คำสั่งบางประเภท

จริงๆแล้วยินดีต้อนรับทุกวิธีแก้ปัญหา


person Gil Sand    schedule 11.08.2016    source แหล่งที่มา


คำตอบ (1)


คำถามนี้เก่าไปหน่อย แต่ฉันเพิ่งแก้ไขปัญหานี้และรู้สึกว่าสิ่งนี้สามารถช่วยใครบางคนได้ สิ่งที่ขัดขวางไม่ให้ฉันรีเซ็ตศูนย์บัญชาการคือฉันได้เพิ่มการดำเนินการเป้าหมายที่คงอยู่เกินอินสแตนซ์ของวงจรชีวิตของตัวควบคุมมุมมองของฉัน

นี่คือสิ่งที่รหัสของฉันดูเหมือน

บนตัวควบคุมมุมมอง:

var commandPlay: Any?
var commandPause: Any?

เมื่อเพิ่มเป้าหมาย:

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
    }

เมื่อละทิ้งเพื่อลบเป้าหมาย (ส่วนสำคัญ):

commandCenter.playCommand.removeTarget(commandPlay)
commandCenter.pauseCommand.removeTarget(commandPause)
person joe    schedule 03.06.2020
comment
ขอบคุณสำหรับการโพสต์สิ่งนี้ สิ่งนี้ได้ผลสำหรับฉัน เคล็ดลับคือการประกาศตัวแปรที่คุณกล่าวถึงข้างต้นเป็นตัวแปร @State ใน Swift 5 ฉันต้องแก้ไขโค้ดการเล่น / หยุดชั่วคราวเพื่อเพิ่มฟังก์ชัน commandPlay / commandPause อย่าลืมกำหนด commandCenter ในฟังก์ชัน atDisappear() ของคุณ ฉันได้ทำการแก้ไขโค้ดของคุณบางส่วนแล้ว ทำได้ดี. - person FontFamily; 27.05.2021
comment
ไม่เป็นไร มันบอกว่าคิวการแก้ไขที่แนะนำนั้นเต็มแล้ว ดังนั้นฉันจึงไม่สามารถแก้ไขคำถามของคุณได้ อย่าลืมบรรทัดนี้: ให้ commandCenter = MPRemoteCommandCenter.shared(); คุณจะต้องหยุดรับเหตุการณ์ระยะไกลด้วย: UIApplication.shared.endReceivingRemoteControlEvents() - person FontFamily; 27.05.2021