Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用swift 2.2中的手表连接在AVPlayerViewController中播放电影?_Swift_Watchos 2_Watchconnectivity - Fatal编程技术网

如何使用swift 2.2中的手表连接在AVPlayerViewController中播放电影?

如何使用swift 2.2中的手表连接在AVPlayerViewController中播放电影?,swift,watchos-2,watchconnectivity,Swift,Watchos 2,Watchconnectivity,如何在AVPlayerViewController中播放此视频,并更改由手表发送的手表连接命令触发的音量(使用swift 2.2)。当我在手表上单击“开始/停止”时,没有收到响应。我的控制台中没有错误或崩溃 import UIKit import AVKit import AVFoundation import WatchConnectivity @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegat

如何在AVPlayerViewController中播放此视频,并更改由手表发送的手表连接命令触发的音量(使用swift 2.2)。当我在手表上单击“开始/停止”时,没有收到响应。我的控制台中没有错误或崩溃

 import UIKit
 import AVKit
import AVFoundation
import WatchConnectivity

@UIApplicationMain
 class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate {

  var window: UIWindow?

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {

    var replyValues = Dictionary<String, AnyObject>()

    let viewController = self.window!.rootViewController
        as! AVPlayerViewController
    var player = AVPlayer()
    let url = "https://example.site/sites/default/files/videos/original/video1bunny_0.mp4"
    let playerItem = AVPlayerItem( URL:NSURL( string:url )! )
    player = AVPlayer(playerItem:playerItem)
    player.rate = 1.0;

    switch message["command"] as! String {
    case "start" :
        player.play()
        replyValues["status"] = "Playing"
    case "stop" :
        player.pause()
        replyValues["status"] = "Stopped"
    case "volume" :
        let level = message["level"] as! Float
        //player.adjustVolume(level)
        replyValues["status"] = "Vol = \(level)"
    default:
        break
    }
    replyHandler(replyValues)
}

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {

    if (WCSession.isSupported()) {
        let session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()

        if session.paired != true {
            print("Apple Watch is not paired")
        }

        if session.watchAppInstalled != true {
            print("WatchKit app is not installed")
        }
    } else {
        print("WatchConnectivity is not supported on this device")
    }

    return true
工作示例 在成功播放MP3的第二个示例中,您已经为
AVPlayer
设置了视图控制器属性,并将新的音频播放器分配给该属性。视图控制器保留音频播放器,即使在
viewdiload
代码退出后也会播放:

class ViewController: UIViewController {
    var audioPlayer: AVAudioPlayer?
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    var player = AVPlayer()
失败的例子 但是,在第一个您尝试使用的示例中,您使用的是一个局部变量,该变量在该代码块退出后立即超出范围:

class ViewController: UIViewController {
    var audioPlayer: AVAudioPlayer?
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    var player = AVPlayer()
音频播放器已释放,不再存在

您应该像在工作示例中一样保留音频播放器的实例。

工作示例 在成功播放MP3的第二个示例中,您已经为
AVPlayer
设置了视图控制器属性,并将新的音频播放器分配给该属性。视图控制器保留音频播放器,即使在
viewdiload
代码退出后也会播放:

class ViewController: UIViewController {
    var audioPlayer: AVAudioPlayer?
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    var player = AVPlayer()
失败的例子 但是,在第一个您尝试使用的示例中,您使用的是一个局部变量,该变量在该代码块退出后立即超出范围:

class ViewController: UIViewController {
    var audioPlayer: AVAudioPlayer?
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    var player = AVPlayer()
音频播放器已释放,不再存在

您应该保留音频播放器的实例,就像您在工作示例中所做的那样