使用 Swift 在 iOS 中远程控制事件

2023-11-26

试图弄清楚如何读取Apple耳机的音量按钮以用作相机快门的触发器(就像Apple相机应用程序那样)。

从文档上远程控制事件, 随事件接收远程控制, and 这个 git 仓库,我拼凑出我可能需要一个AVAudioPlayer目的,.beginReceivingRemoteControlEvents(), and remoteControlReceivedWithEvent,同时制作此视图canBecomeFirstResponder() return true.

import UIKit
import AVFoundation

class ViewController: UIViewController, AVAudioPlayerDelegate {
    var player: AVAudioPlayer!
    override func viewDidLoad() {
        super.viewDidLoad()

        var session: AVAudioSession = AVAudioSession.sharedInstance()
        session.setActive(true, error: nil)
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        println("viewDidAppear worked...")
        self.becomeFirstResponder()
        UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
    }

    override func canBecomeFirstResponder() -> Bool {
        return true
    }

    override func remoteControlReceivedWithEvent(event: UIEvent) {
        let rc = event.subtype
        println("does this work? \(rc.rawValue)")
        //takePicture()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

我期望得到"does this work"当按下耳机上的音量按钮时,我只是看到它像平常一样调整耳机音量。所以我一定错过了一些东西,也许是delegate or AVSession?


我交叉发布了这个r/swift,我被告知它可能需要播放音频(直接从文档引用)。

因此,虽然这不是理想的解决方案,但它适合我自己的私人使用。

import UIKit
import AVFoundation
import MediaPlayer

class ViewController: UIViewController, AVAudioPlayerDelegate {
    var testPlayer: AVAudioPlayer? = nil

    func loadSound(filename: NSString) -> AVAudioPlayer {
        let url = NSBundle.mainBundle().URLForResource(filename as String, withExtension: "caf")
        var error: NSError? = nil
        let player = AVAudioPlayer(contentsOfURL: url, error: &error)
        if error != nil {
            println("Error loading \(url): \(error?.localizedDescription)")
        } else {
            player.prepareToPlay()
        }
        return player
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.testPlayer = self.loadSound("silence")
        self.testPlayer?.numberOfLoops = -1
        self.testPlayer?.play()
    }

    override func canBecomeFirstResponder() -> Bool {
        return true
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.becomeFirstResponder()
        UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
    }

    override func remoteControlReceivedWithEvent(event: UIEvent) {
        let rc = event.subtype
        println("rc.rawValue: \(rc.rawValue)")
        // take photo
    }
}

我注意到在苹果的相机应用程序中,+/- 音量按钮触发相机,麦克风按钮暂停/播放另一个应用程序中运行的任何音频,但在此实现中,音量按钮仍然控制音量(并且任何音频已暂停)当应用程序启动时)。

An rc.rawValue: 103对应单击麦克风按钮,双击返回104,然后三次单击返回105,然后有时一次碰撞一对会返回108 or 109.

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

使用 Swift 在 iOS 中远程控制事件 的相关文章

  • 应用程序已批准 - 等待开发人员发布 - 目前在您所在的国家/地区不可用

    我已经为 iOS 应用商店创建了一个应用程序 它已获得批准 现在正在等待我的释放 在 iTunes connect 中 我确保在可用性方面选择所有国家 地区 在我的 itunesConnect 应用程序上 如果我选择我的应用程序并点击 在
  • 如何使用 Apple Map Kit 实现地址自动完成

    我想自动填写用户的地址 与 google api 在此链接中提供的地址相同 https developers google com maps documentation javascript places autocomplete hl e
  • 故事板入口点缺失

    在 xcode 7 2 中 对象列表中没有 Storyboard Entry Point 项 我需要使用 Storyboard Entry Point 我通过谷歌搜索找不到任何类似的问题 所以任何人都可以在这里帮助我 单击要作为情节提要入口
  • 使用 MPVolumeView 滑块调整音量时隐藏设备音量 HUD 视图

    我在 iPad 应用程序中使用 MPMoviePlayer 实现视频播放器 使用 MPVolumeView 进行音量控制 我的问题是 当我滚动音量视图来调整音量时 会显示设备的音量平视显示器覆盖 如下面的屏幕截图所示 如何禁用此系统音量指示
  • UIModalPresentationFormSheet 的圆角

    如果这是一个明显的问题 请原谅我 我是个相对较新的人 我有一个模态视图 我设置了自定义尺寸和圆角 void viewWillLayoutSubviews super viewWillLayoutSubviews self view supe
  • 如何在 CarPlay 中显示“正在播放”选项卡?

    我正在开发一个支持 CarPlay 的应用程序 这是一个音频应用程序 我可以显示 2 个选项卡 最喜欢的和推荐的 但我只是不知道如何显示 正在播放 选项卡 我只是找不到任何有关此的信息 我是否必须手动显示它 以及如何推送 我必须手动完成吗
  • NSFileManager.defaultManager().fileExistsAtPath 返回 false 而不是 true

    这怎么可能 let exists NSFileManager defaultManager fileExistsAtPath path absoluteString print exists exists false This is pat
  • 使用 CoreTelephony 获取运营商名称仅返回“Carrier”

    我尝试使用此代码获取运营商名称 使用 CoreTelephony CTTelephonyNetworkInfo netinfo CTTelephonyNetworkInfo alloc init CTCarrier carrier neti
  • Jenkins - Xcode 构建工作协同设计失败

    下面是我的构建脚本 不使用 xcodebuild 插件 构建步骤工程 我使用所需的证书和私钥创建了一个单独的钥匙串 它们在钥匙串访问中可见 脚本中的钥匙串命令不会失败 安全列表钥匙串将这些显示为有效的钥匙串 它的表现就像解锁命令并未真正成功
  • 自定义绘制的 UITableViewCell 中的可访问性

    当您进行自定义绘图时 UITableViewCells 滚动速度会显着提高 但是辅助功能会中断 应该如何向这样的单元添加辅助功能支持 老问题了 但 iOS 已经内置了对这种辅助功能的支持 看看UIAccessibilityContainer
  • 如何使用 Codable 解析此 JSON?

    我一直在尝试从我的中解析这个对象JSON并不断收到此错误 错误 类型不匹配 Swift Array Swift DecodingError Context codingPath debugDescription 本应解码数组 但找到了字典
  • iPhone NSDateFormatter 时区转换

    我正在尝试创建一个格式化程序 将显示的日期格式转换为 NSDate 对象 NSString dateStr 2010 06 21T19 00 00 05 00 NSDateFormatter dateFormat NSDateFormatt
  • NSDateComponents 中的 sethours

    我正在尝试在 NSDateComponents 中设置小时 我编写了以下代码 NSCalendar calendar NSCalendar alloc initWithCalendarIdentifier NSGregorianCalend
  • UISlider最大值调整

    我有三个滑块 这些显示了我需要的不同元素的百分比 所有元素的最大值是 100 a b c 100 现在这些都相互依赖并有助于制作饼图 目前都可以设置为最大值 100 如何从逻辑上使这种依赖性和最大值成为可能 提前致谢 在处理滑块更改的方法中
  • 我可以在 iOS 中测量蓝牙信号强度吗?

    Can I 测量信号强度我的 iPhone 范围内的蓝牙设备数量 基本上我想要做的是扫描范围内的设备列表 然后查看哪个设备的信号强度最高 在 iOS 中是否可行 如果可以 我该怎么做 是的 有一种方法可以测量蓝牙低功耗 4 0 的信号强度
  • 自定义键盘 iphone,UITextView 中的退格按钮有问题

    检查此代码 我的自定义键盘 IBAction updateTextBackSpace id sender if txtview text length gt 0 NSString deletedLastCharString txtview
  • 在 IOS 应用程序中遇到奇怪的错误:“DOMException 105”。寻找有关如何定位代码中的错误的指导

    无法在任何地方找到任何对此错误的引用 它每次都会发生在同一点 就像我单击 UITableView 行元素一样 下面是堆栈跟踪 有人可以提供有关问题可能是什么和 或如何找到错误的任何建议吗 谢谢你 2016 11 04 10 12 56 09
  • 如何避免强制解包变量?

    我如何避免使用 执行强制解包操作 因为使用它通常是一个糟糕的选择 对于像下面这样的代码 什么是更好的选择 使用它使代码看起来更简单 并且因为 if 检查变量 被调用的永远不会为零 因此不会崩溃 我的老师向我们介绍了 bang 运算符 然后告
  • 连续调用startRecordingToOutputFileURL:

    苹果文档 https web archive org web 20140814091047 http developer apple com library ios DOCUMENTATION AVFoundation Reference
  • iOS UITest:如何找到UITableViewCell的AccessoryView?

    你好我正在学习UITests now 我有个问题 如何检测accessoryView的点击tableViewCell 在UI测试中 下面是我的tableViewCell 我想要检测细节闭合配件视图水龙头 像这样 app tables cel

随机推荐

  • mupdf 库的 Proguard 问题

    在我尝试构建发行版本之前 我的应用程序运行良好 我收到以下错误消息 java lang NoSuchFieldError 没有名称 globals 签名 J 的字段 在 Lcom artifex mupdfdemo MuPDFCore 类中
  • SendKeys 到非活动应用程序

    我试图弄清楚如何使我的 C 应用程序将密钥发送到另一个应用程序窗口 而不需要关注它 我有一个单词列表和 3 个记事本文件 想象一下 我按顺序打开了所有 3 个记事本窗口 我的程序将获取列表框中的第一个单词并将其写入第一个记事本窗口中 第二个
  • AngularJS 查询生成器类似于 http://redquerybuilder.appspot.com/ [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在尝试仅使用 AngularJS 创建一个完整的查询生成器 我见过http redquerybuilder appspot com 这很棒 但不适用于 AngularJS 我
  • Scala 中缀类型的现实示例

    我发现了一种有趣的语法东西 它被称为Infix type Example class M T U new Int M String 现在我正在从一些流行的框架或库中寻找这种类型的示例 我在哪里可以找到它们 有什么建议么 无形图书馆 有一堆
  • 即使在 unsetenv("LD_PRELOAD") 之后,LD_PRELOAD 也会影响新的子进程

    我的代码如下 preload c 内容如下 include
  • 如何向 DropDownList 添加初始“选择”值

    如果我使用 DropDownList
  • datepicker选择星期几android

    我的应用程序中有日期选择器 它运行良好 但我需要选择星期几而不是日期 即 如果我选择日期 23 我需要获取像 星期五 这样的日期而不是数字 我用了OnDateSetListener对于点击事件 private DatePickerDialo
  • 显示 sweave 的错误

    我正在使用 Sweave 编写一些 R 笔记 并希望显示常见错误 例如 lt
  • WordPress 分页简码

    向 WordPress 大脑提出一个简单的问题 我有一个短代码 当前可以导入特定帖子类型的所有帖子 但是 我在向 wp query 添加分页时遇到问题 为了解释此代码的功能 我将 feed type attractions limit 2
  • 如何在 bazel/tensorflow 构建期间添加外部头文件

    我正在尝试添加外部头文件 如 OpenCL 头文件 以进行一些张量流实验 我尝试将其添加到 tensorflow core BUILD 文件下的 BUILD 文件中 This includes implementations of all
  • 使用 ContentCachingRequestWrapper 导致参数映射为空

    我已经实现了一个过滤器 在其中我想首先读取请求的内容进行一些检查 然后我想继续 但问题是 在过滤器链的以下过滤器中getParameters 方法来自class Request org eclipse jetty server Reques
  • 如何使用合并内存访问

    我有 N 个线程在设备上同时执行 它们需要全局内存中的 M N 个浮点数 访问合并的全局内存的正确方法是什么 在这件事上 共享内存能提供什么帮助呢 通常 当相邻线程访问内存中的相邻单元时 可以实现良好的合并访问 因此 如果tid保存线程的索
  • RecyclerView可扩展cardView

    我用 RecyclerView 制作了一个小项目 里面有 CardView 项目 我创建了可扩展卡 通过按卡内的小按钮进行扩展 每张卡片始终包含可见部分 id top layout 和可扩展部分 id expandable part lay
  • 如何使用 Java 创建非常大的布尔数组?

    当我尝试使用 Java 创建一个非常大的布尔数组时 例如 boolean isPrime1 new boolean 600851475144 我可能会遇到精度损失错误 是不是太大了 可存储600个billion位 您需要 75 的绝对最小地
  • 是否可以使用Java Reflection创建内部类的实例?

    代码示例 public class Foo public class Bar public void printMesg String body System out println body public static void main
  • 用于服务器端控制的 jQuery 选择器

    有什么区别 and id lblName 将找到一个元素id属性由提供ClientIDASP Net 中的属性 id lblName 会找到一个带有id以结尾的属性lblName 例如foo lblName
  • 在企业代理背后使用 Selenium RemoteWebDriver

    如何从公司代理后面通过 RemoteWebDriver 连接到 Selenium 网格 例如 BrowserStack 被测试的应用程序位于代理之外 可以从 BrowserStack 自由访问 This 在企业代理后面使用 Selenium
  • 如何设置 bootstrap-datepicker-rails?

    有人知道如何设置 gem bootstrap datepicker rails 吗 我按照以下步骤操作http rubydoc info gems bootstrap datepicker rails 0 6 21 frames 基本上 I
  • Windows Azure 内部端点的安全性如何?

    我有一个 Web 角色中的前端 MVC 应用程序 受 WIF 和 ACS 保护 我希望它成为我的 Azure 应用程序唯一公开的表面 它连接到许多后端服务 一些辅助角色和一些 为了方便在 VS 中添加服务引用 或者因为它们使用 WCF 数据
  • 使用 Swift 在 iOS 中远程控制事件

    试图弄清楚如何读取Apple耳机的音量按钮以用作相机快门的触发器 就像Apple相机应用程序那样 从文档上远程控制事件 随事件接收远程控制 and 这个 git 仓库 我拼凑出我可能需要一个AVAudioPlayer目的 beginRece