iOS 15 上的 AirPods Pro 无法播放音频文件

2023-12-13

我正在使用此代码来播放音频。我的代码在所有耳机型号的 iOS 14 上运行良好,但当客户将设备更新到 iOS 15 并使用 AirPods Pro 时,不会播放任何音频文件。在其他 AirPods 型号上以及通过 iPhone 扬声器播放音频文件时,一切正常。发生了什么事。如何修复它?

Update:

经过漫长的等待,我收到了 AirPods Pro。起初我删除了那行setupMediaPlayerNotificationView(true)该应用程序播放的声音很好。但锁屏上的一些功能被删除了。应用程序中的这一行没有声音。在 App Store 中,我有 3 个具有相同代码的应用程序。 ios 15 之后只有一个可以工作。如果代码相同,我无论如何也不明白原因是什么。为什么其他人不工作?但事实证明,这个有效的应用程序的名字里有一个词——Build Settings -> Product Name -> "myAppName"。其余的人也说了几句话。当我将它们重命名为 1 个单词时,一切正常。声音播放得很好。它以前如何?我还是不明白?如果有人有版本,分享一下。

code:

 let url = Bundle.main.url(forResource: "\(masterIndex)0", withExtension: "m4a")!
            
     do {
                
     audioPlayer = try AVAudioPlayer(contentsOf: url)
     audioPlayer.delegate = self
     audioPlayer.prepareToPlay()
     play(sender:AnyObject.self as AnyObject)
                
     setupMediaPlayerNotificationView(true)
     lockScreen()
                
     } catch {
                
 }

其他代码:

func lockScreen() {
        
    var albumArtwork : MPMediaItemArtwork!
    let image:UIImage = UIImage(named: "infoImage")!
        
    albumArtwork = MPMediaItemArtwork.init(boundsSize: image.size, requestHandler: { (size) -> UIImage in
        return image
    })
        
    let infotitle = "\(firstArray[index])"
        
    MPNowPlayingInfoCenter.default().nowPlayingInfo = [
        MPMediaItemPropertyArtist : "",
        MPMediaItemPropertyTitle : infotitle,
        MPMediaItemPropertyArtwork : albumArtwork,
        MPMediaItemPropertyAlbumTitle : "",
        MPNowPlayingInfoPropertyElapsedPlaybackTime : Int(audioPlayer.currentTime),
        MPMediaItemPropertyPlaybackDuration: Int(audioPlayer.duration)]
        
}
    
@objc func lockScreenPlay(_ event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
    self.audioPlayer.play()
    self.lockScreen()
    self.playButton.setImage(UIImage(named: "pause.png"), for: UIControlState.normal)
    return .success
}
    
@objc func lockScreenPause(_ event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
    self.audioPlayer.pause()
    self.lockScreen()
    self.playButton.setImage(UIImage(named: "play.png"), for: UIControlState.normal)
    return .success
}
    
@objc func lockScreenFastForward(_ event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
    var time: TimeInterval = audioPlayer.currentTime
    time += 15.0
    if time > audioPlayer.duration {
        audioPlayerDidFinishPlaying(audioPlayer, successfully: true)
    } else {
        audioPlayer.currentTime = time
        updateTime()
    }
        self.lockScreen()
        return .success
    }
    
@objc func lockScreenFastBackward(_ event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
    var time: TimeInterval = audioPlayer.currentTime
    time -= 15.0
    if time < 0 {
        audioPlayer.currentTime = 0
        updateTime()
    } else {
        audioPlayer.currentTime = time
        updateTime()
    }
        self.lockScreen()
        return .success
    }
    
@objc func changedThumbSlider(_ event: MPChangePlaybackPositionCommandEvent) -> MPRemoteCommandHandlerStatus {
    let time = event.positionTime
    audioPlayer.currentTime = TimeInterval(time)
    self.lockScreen()
    return .success
}
    
func setupMediaPlayerNotificationView(_ enable: Bool)  {
    let commandCenter = MPRemoteCommandCenter.shared()
    if enable {
        commandCenter.playCommand.addTarget(self, action: #selector(lockScreenPlay))
        commandCenter.pauseCommand.addTarget(self, action: #selector(lockScreenPause))
        commandCenter.skipForwardCommand.preferredIntervals = [15]
        commandCenter.skipForwardCommand.addTarget(self, action: #selector(lockScreenFastForward))
        commandCenter.skipBackwardCommand.preferredIntervals = [15]
        commandCenter.skipBackwardCommand.addTarget(self, action: #selector(lockScreenFastBackward))
        commandCenter.changePlaybackPositionCommand.addTarget(self, action: #selector(self.changedThumbSlider(_:)))
    } else {
        commandCenter.playCommand.removeTarget(self, action: #selector(lockScreenPlay))
        commandCenter.pauseCommand.removeTarget(self, action: #selector(lockScreenPause))
        commandCenter.skipForwardCommand.removeTarget(self, action: #selector(lockScreenFastForward))
        commandCenter.skipBackwardCommand.removeTarget(self, action: #selector(lockScreenFastBackward))
        commandCenter.changePlaybackPositionCommand.removeTarget(self, action: #selector(self.changedThumbSlider(_:)))
    }
}

@IBAction func play(sender: AnyObject) {
        if !audioPlayer.isPlaying{
            
            animationStatus()
            
            audioPlayer.play()
            slider.maximumValue = Float(audioPlayer.duration)
            timer = Timer(timeInterval: 0.1, target: self, selector: #selector(self.updateTime), userInfo: nil, repeats: true)
            RunLoop.main.add(timer!, forMode: .commonModes)
            restorePlayerCurrentTime()
            playButton.setImage(UIImage(named: "pause.png"), for: UIControlState.normal)
        } else {
            
            animationStatus()
            
            audioPlayer.pause()
            playButton.setImage(UIImage(named: "play.png"), for: UIControlState.normal)
            timer?.invalidate()
        }
    }
    
    @IBAction func fastForward(sender: AnyObject) {
        var time: TimeInterval = audioPlayer.currentTime
        time += 15.0 // Go Forward by 15 Seconds
        if time > audioPlayer.duration {
            audioPlayerDidFinishPlaying(audioPlayer, successfully: true)
        } else {
            audioPlayer.currentTime = time
            updateTime()
        }
        self.lockScreen()
    }
    
    @IBAction func fastBackward(sender: AnyObject) {
        var time: TimeInterval = audioPlayer.currentTime
        time -= 15.0 // Go Back by 15 Seconds
        if time < 0 {
            audioPlayer.currentTime = 0
            updateTime()
        } else {
            audioPlayer.currentTime = time
            updateTime()
        }
        self.lockScreen()
    } 

private func restorePlayerCurrentTime() {
        let currentTimeFromUserDefaults : Double? = UserDefaults.standard.value(forKey: "currentTime\(masterIndex)\(index)") as! Double?
        if let currentTimeFromUserDefaultsValue = currentTimeFromUserDefaults {
            audioPlayer.currentTime = currentTimeFromUserDefaultsValue
            slider.value = Float.init(audioPlayer.currentTime)
        }
    }
    
    @objc func updateTime() {
        let currentTime = Int(audioPlayer.currentTime)
        let minutes = currentTime/60
        let seconds = currentTime - minutes * 60
        
        let durationTime = Int(audioPlayer.duration) - Int(audioPlayer.currentTime)
        let minutes1 = durationTime/60
        let seconds1 = durationTime - minutes1 * 60
        
        timeElapsed.text = NSString(format: "%02d:%02d", minutes,seconds) as String
        timeDuration.text = NSString(format: "-%02d:%02d", minutes1,seconds1) as String
        
        UserDefaults.standard.set(currentTime, forKey: "currentTime\(masterIndex)\(index)")
        UserDefaults.standard.set(durationTime, forKey: "durationTime\(masterIndex)\(index)")
        
        slider.value = Float.init(audioPlayer.currentTime)
    }
    
    func audioPlayerDidFinishPlaying(_ audioPlayer: AVAudioPlayer, successfully flag: Bool) {
        
        let currentTime = 0
        let durationTime = 0.1
        UserDefaults.standard.set(currentTime, forKey: "currentTime\(masterIndex)\(index)")
        UserDefaults.standard.set(durationTime, forKey: "durationTime\(masterIndex)\(index)")
        slider.value = Float.init(audioPlayer.currentTime)
        timer?.invalidate()
        
        let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
        let documentDirectoryPath:String = path[0]
        let fileManager = FileManager()
        let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/\(masterIndex)/\(index+1).mp3"))
        
        if fileManager.fileExists(atPath: destinationURLForFile.path){
            
            if endOfChapterSleepTimer == true {
                endOfChapterSleepTimer = false
            } else {
                index = index + 1
                viewDidLoad()
            }
            
        } else {
            
        }
    }

func animationStatus() {
        let vinylLayer = vinylView.layer
        pause = !pause
        if pause {
            pauseLayer(layer: vinylLayer)
        } else {
            if vinylStatus == "true" {
                resumeLayer(layer: vinylLayer)
            } else {
                rotateImageView()
                resumeLayer(layer: vinylLayer)
            }
        }
    }
    
    private func rotateImageView() {
        vinylStatus = "true"
        
        UIView.animate(withDuration: 3, delay: 0, options: .curveLinear, animations: {
            self.vinylView.transform = self.vinylView.transform.rotated(by: .pi / 2)
        }) { (finished) in
            if finished {
                self.rotateImageView()
            }
        }
    }

可能是iOS 15的问题?
我找到了一些搜索查询的论文:“声音无法在 ios 15 上播放 AirPods Pro”:one, tow, three .
据我了解,这个问题在 iOS 15.1 中已得到修复。 有时 Apple 会犯错误(例如,每次更新 Xcode :))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 15 上的 AirPods Pro 无法播放音频文件 的相关文章

随机推荐

  • 修改exe资源中的字符串

    我该如何修改buffer在下面的代码中然后保存可执行文件资源中的更改 我正在寻找类似的东西SetString handle index buffer size var hExe Cardinal buffer array 0 4097 of
  • Polymer 1.x:从铁列表中删除项目

    我正在尝试从中删除一个项目iron list使用以下代码 my element html
  • 当我将鼠标悬停在 pygame 上时,为什么我的按钮不会改变颜色?

    我是 pygame 的新手 一直在尝试创建一个带有一些按钮的简单界面 当鼠标悬停在按钮上时 我无法让按钮改变颜色 我已经成功创建了按钮 但无法让它与我的鼠标交互 该代码创建一个按钮对象 其中包含一个绿色按钮的实例 当鼠标悬停在上面时 它应该
  • OFN_ENABLEHOOK 修改 GetOpenFileName() 的外观

    为什么添加一个钩子过程 用OFN ENABLEHOOK and OFN EXPLORERflags 到 GetOpenFileName 会导致在 Windows 7 中显示不同的对话框 如果挂钩过程只是返回 FALSE不做任何事情 Upda
  • 如何使用 AVFoundation 使用不同图像和不同 CMTimes 为视频添加水印

    我正在使用 AVFoundation 在我的电影中添加水印 这与互联网和苹果公司上流传的代码配合得很好 但我不想显示完整的时间水印 我想在同一部电影中显示不同的水印 我有一个 AVAsset NSString path NSBundle m
  • 如何在 firebase android 上上传视频/mp3 文件

    我可以从 firebase 上传 下载图像 但不知道如何在 android so 建议我在 firebase 上上传视频或 mp3 文件 提前致谢 重写示例docs基于给出的答案将 MP3 文件上传到 Firebase Storage 最终
  • iOS6 中未调用 shouldAutoRotate 方法

    我有一个UIViewController详细视图是从UITableView in a UINavigationController 在里面UIViewController我添加了许多子视图 例如UITextView UIImageView
  • 如何在 C# 中实现 WebDriverEventListener?

    如何实施WebDriverEventListener in C 我在java导入中没有问题 import org openqa selenium support events AbstractWebDriverEventListener 然
  • 如何解析 ColdFusion 返回的 JSON

    我确信这是一个相对简单的问题 但我似乎无法在网上找到简单的答案 我有 cfhttp POST 返回的几行 JSON 其中包含一个图像 URL 我想解析该图像 URL 并将其显示在我的 ColdFusion 页面中 href http ser
  • 使用 Symfony2 进行 Kerberos 身份验证

    我正在尝试在 Symfony2 中使用 kerberos 对用户进行身份验证 但我在途中有点迷失 当用户通过身份验证时 Apache 服务器返回 SERVER REMOTE USER 变量 给我他的用户名 我可以恢复这个值 request
  • 创建 1 月 1 日和 2 日的 NSDate 时的奇怪行为

    我正在创建这样的日期 NSCalendar gregorian NSCalendar alloc initWithCalendarIdentifier NSGregorianCalendar NSDateFormatter dateForm
  • 在 OpenGL 中渲染透明对象

    我正在尝试使用 opengl 渲染一些 3d 对象 要求是我需要隐藏位于另一个透明对象后面的所有透明对象 所有三角形都在单个三角形缓冲区中 并且将立即绘制 请照亮一些 尝试使用 glDepthMask Render all opaque o
  • 最后一个文件进度达到 100% 与停止/完成事件之间存在巨大差距吗?

    我正在使用blueimp 文件上传插件实现一些文件上传功能 我注意到我的最后一个文件进度条达到 100 与停止和完成事件触发之间可能存在很大的时间间隔 我有以下代码 fileupload fileupload dataType json p
  • 如何在 PHP 中使用 AES CBC+CTS(密文窃取)模式加密/解密数据?

    我必须在 PHP 中以 AES CTS 模式 密文窃取 有时称为 AES XTS 加密和解密数据 才能与 NET 平台编写的远程系统进行互操作 在 NET 4中 这种模式是原生支持 对于PHP 我找不到解决方案 根据手册 mcrypt似乎不
  • TabPageIndicator 文本字体

    我正在使用 ViewPagerIndicator 但没有任何运气 所以我会在这里询问 有没有办法更改 TabPageIndicator 中选项卡的字体 您不需要使用其他第三方库来执行此操作 您可以修改TabView类 在TabPageInd
  • '__len__() 有什么魔力?

    所以列表对象没有简单的长度属性len而是 魔法 len 为什么优先使用该功能len 在列表上而不是在其属性上 有没有功能len 不是简单的查询 len 为何要绕路而没有my list len 想一想可能会有所帮助 len 作为一种方法 您可
  • 刷新 Jquery 数据表中的排序缓存

    我可以看到 当首次使用表初始化时 Jquery 数据表会生成排序缓存表 columns cache 方法 我的一列包含 td 元素 这些元素的跨度上有类 例子 tr td span class SpanColors red span td
  • Android 清单限制平板电脑

    出于商业原因 我想将我的 Android 应用程序严格限制为平板电脑设备 目前 我可以通过设置将应用程序限制为 Honeycomb 设备 android minSdkVersion 11 但下一版 Android 冰淇淋三明治 的平板电脑和
  • 如何在 Android 4.3 api 18 上更改 ActionBar 标题文本的颜色

    我正在使用 appcompat v7 库来支持 api 级别 8 及更高版本的操作栏 我正在尝试更改操作栏标题文本的颜色 GingerBread 中标题文本的颜色正在变化 但是当我使用 JellyBean 在手机上运行该应用程序时 颜色没有
  • iOS 15 上的 AirPods Pro 无法播放音频文件

    我正在使用此代码来播放音频 我的代码在所有耳机型号的 iOS 14 上运行良好 但当客户将设备更新到 iOS 15 并使用 AirPods Pro 时 不会播放任何音频文件 在其他 AirPods 型号上以及通过 iPhone 扬声器播放音