将外部配件连接到 3.5 毫米耳机插孔时无法收到通知

2023-12-10

我已经尝试让它发挥作用有一段时间了。 我已经完成了文档中所说的所有操作,但仍然一无所获。

这是我的应用程序委托中注册本地通知的代码:

- (void) registerForLocalNotifications {
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(_accessoryConnected:)
                                             name:EAAccessoryDidConnectNotification
                                           object:nil];


[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(_accessoryDisconnected:)
                                             name:EAAccessoryDidDisconnectNotification
                                           object:nil];

[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; }

上面是从 applicationDidFinishLaunching 调用的。

这是连接/断开方法的代码:

- (void) _accessoryConnected:(NSNotification *)notification {
          NSLog(@"_accessoryConnected"); }

- (void) _accessoryDisconnected:(NSNotification*)notification {
NSLog(@"_accessoryDisconnected"); }


-(void) accessoryDidDisconnect:(EAAccessory *) accessory {
NSLog(@"accessoryDidDisconnect"); }

尝试连接 iPhone 附带的耳机,但没有任何结果,对于我想要与应用程序集成的外部配件也是如此。

请帮忙, 谢谢, 沙乌尔.


为此,您应该使用 AudioSessionPropertyListener。 EAAccessory 通知适用于连接到 30 针端口的硬件。 在 viewDidLoad 中添加此监听器并在 ViewDidUnLoad 中删除它

AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, audioSessionPropertyListener, nil);

在视图控制器中添加以下方法。

BOOL isHeadsetPluggedIn() {
    UInt32 routeSize = sizeof (CFStringRef);
    CFStringRef route;

    OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
                                              &routeSize,
                                              &route
                                              );    
    NSLog(@"%@", route);
    return (!error && (route != NULL) && ([(NSString*)route rangeOfString:@"Head"].location != NSNotFound));
}

void audioSessionPropertyListener(void* inClientData, AudioSessionPropertyID inID,
                                  UInt32 inDataSize, const void* inData) {
    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;

    // Determines the reason for the route change, to ensure that it is not
    //      because of a category change.
    CFDictionaryRef routeChangeDictionary = inData;    
    CFNumberRef routeChangeReasonRef = CFDictionaryGetValue (routeChangeDictionary,CFSTR (kAudioSession_AudioRouteChangeKey_Reason));

    SInt32 routeChangeReason;    
    CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);

    // "Old device unavailable" indicates that a headset was unplugged, or that the
    //  device was removed from a dock connector that supports audio output. 
    if (routeChangeReason != kAudioSessionRouteChangeReason_OldDeviceUnavailable)
        return;

    if (!isHeadsetPluggedIn()) 
    {
        AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
    }
    else 
    {
        UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
        AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
    }    
}

请注意,我很久以前从某个地方得到了这段代码,它对我有用。现在无法确定来源,因为我不知道从哪里得到它。

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

将外部配件连接到 3.5 毫米耳机插孔时无法收到通知 的相关文章

随机推荐

  • PHP 调用时引用传递不可避免?

    给出以下接口 interface ISoapInterface public static function registerSoapTypes wsdl public static function registerSoapOperati
  • 在 for 循环中写入文件仅写入最后一个值

    text file open new txt r lines text file readlines for line in lines var1 var2 line split myfile open xyz txt w myfile w
  • 如何手动将 twitter bootstrap 包含在我的 Rails 项目中(不使用任何 gem)?

    我正在学习 Rails 并且想使用 Rails 和 Twitter Bootstrap 我的 Rails 项目布局是 assets images javascripts stylesheets controllers helpers mai
  • iOS UITableView 中的多列

    我有多行和多列数据 但 iPhone UITableView 仅包含单列和多行 如何按照 Apple 的人机界面指南显示多列数据 您可能需要自己构建它 或者使用库 例如UI网格视图 我是创造者 你可以学习一下源码UI网格视图 真的很短
  • 无法使用 Laravel 连接到本地 MySQL 服务器

    当我运行这个命令时find name my cnf我找到了两个位置my cnf opt lampp etc my cnf etc mysql my cnf 我不明白MySQL服务器使用的是哪一个 而且 当我运行命令时php artisan
  • 模拟器还是仿真器?有什么不同?

    虽然我了解模拟和仿真的一般含义 但我几乎总是对它们感到困惑 假设我创建了一个模仿现有硬件 软件的软件 我应该称呼它什么 模拟器还是仿真器 谁能解释一下编程方面的区别吗 额外提示 这两个术语在英语中有什么区别 抱歉 我不是母语人士 仿真是模仿
  • 按钮在主活动中不可见

    我在主要活动中创建了三个按钮 我对按钮一使用了以下代码 btn setOnClickListener new View OnClickListener Override public void onClick View v btn setV
  • matlab条件矩阵赋值

    我有一个关于矩阵分配的问题 假设我有三个矩阵A B和C 我想根据规则将矩阵C的元素分配给A和B的元素 C i j A i j if abs C i j A i j lt abs C i j B i j C i j B i j if abs
  • Mysql:“select from”的结果顺序与“select * from”的结果顺序不同

    我有一个 mysql 数据库 其中有一个表 困难 其中有一些记录 如果我 从困难中选择 我会按照添加的顺序返回它们 并按主键 ID 排序 mysql gt select from difficulties id value name let
  • 如何让这个 jQuery 动画代码永远循环?

    我正在尝试在滑块上创建文本动画循环 我尝试循环但它不起作用 你能告诉我如何永远循环这个脚本吗 谢谢
  • RouteCollection”不包含“MapMvcAttributeRoutes”的定义

    我只需要降级我的ASP NET 4 5 2申请到ASP NET 4 0 当然 这会带来问题 比如引用安装不正确 我已经解决了其中一些问题 但我无法解决错误 CS106 RouteCollection 不包含定义 MapMvcAttribut
  • 美丽汤 find() 返回 None?

    我正在尝试解析 HTMLwebsite 我想从所有这些中获取文本span元素与class post subject 例子 span class post subject Set of 20 moving boxes 20009 or 200
  • 菜单背景改变滚动颜色

    我想做的是 当用户到达网站的下一部分时 将菜单的背景从透明淡入浅灰色 我到处搜索脚本 并在这里尝试了多个脚本 但似乎根本不起作用 任何帮助将不胜感激 Thanks HTML
  • std:: 引用对

    拥有一个有效吗std pair参考文献 特别是 赋值运算符是否存在问题 根据这个链接 好像没有对operator 进行特殊处理 所以默认的赋值运算符将无法生成 我想要一个pair
  • 指数曲线拟合matlab

    我有以下等式 我想使用 MATLAB 对上述方程进行指数曲线拟合 其中y f u a y是我的输出 u a 是我的输入 我想求系数A B对于一组提供的数据 我知道如何通过定义状态来对简单多项式执行此操作 举个例子 如果states ones
  • 如何保存tf.data.Dataset对象?

    如上 我尝试对其进行酸洗 但出现以下错误 Maybe arr self cpu nograd numpy pylint 禁用 受保护的访问 运行时错误 Tensorflow 类型 21 无法转换为 numpy dtype tf data D
  • 在 Fortran 中调用子例程(分段错误)

    以下代码在 Linux 系统上使用 pgf90 编译时出现分段错误 而在 Windows 上使用 Intel Visual FORTRAN 时运行成功 program main implicit none integer a 3 b 3 c
  • 如何计算文档中单词与特定术语的接近度

    我正在尝试找出一种方法来计算文档中特定术语的单词接近度以及平均接近度 按单词 我知道 SO 上也有类似的问题 但没有任何东西可以给我我需要的答案 甚至没有给我指出一些有用的地方 假设我有以下文本 song lt Far over the m
  • 检测精灵之间碰撞的最佳方法?

    检测 2D 游戏精灵中的碰撞的最佳方法是什么 我目前从事 allegro 和 G 工作 有多种方法可以检测碰撞检测 根据您使用的是 2d 还是 3d 环境 您使用的方法将略有不同 还要记住 在建立碰撞检测系统时 要考虑到您可能想要在游戏中实
  • 将外部配件连接到 3.5 毫米耳机插孔时无法收到通知

    我已经尝试让它发挥作用有一段时间了 我已经完成了文档中所说的所有操作 但仍然一无所获 这是我的应用程序委托中注册本地通知的代码 void registerForLocalNotifications NSNotificationCenter