代码之家  ›  专栏  ›  技术社区  ›  Batgar

如何检测耳机是否连接到iPod touch G1?

  •  1
  • Batgar  · 技术社区  · 17 年前

    关于如何检测麦克风是否通过 AudioSessionGetProperty属性 / 音频输入可用 ,但我没有看到任何与检测连接到ipod touch g1的耳机相关的文章。

    审查: iPod touch G2硬件与iPod touch G1硬件的区别如下:

    • iPod touch G2有一个内置扬声器
    • iPod touch G2可以使用耳机端口上的麦克风

    我有一个应用程序,需要播放声音是有用的,我想很好,并有一个探测器,显示该应用程序是有用的,一旦他们连接了一些耳机。

    我的初步试验表明,AudioSessionAPI(特别是 AudioSessionGetProperty属性 与 音频路由 常数)即使耳机未连接到iPod touch G1,也始终报告“耳机”。

    我遗漏了什么吗?我的音频通话有交叉连接吗?如果有人在iPodtouchG1上尝试过这个,得到了不同的结果?有没有另一种方法来编织音频会话api并得到我想要的?

    这都是针对iphone os 3.0和iphoneos3.0sdk的真实ipod touch g1硬件。

    提前谢谢你, --巴特加

    5 回复  |  直到 17 年前
        1
  •  2
  •   Himanshu Agnihotri    14 年前

    使用此方法可以轻松获得:

    - (BOOL)isHeadsetPluggedIn {
    UInt32 routeSize = sizeof (CFStringRef);
    CFStringRef route;
    
    OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
    &routeSize,
    &route);
    
    if (!error && (route != NULL) && ([route isEqual:@"HeadsetInOut"])) {
    return YES;
    }
    
    return NO;
    }
    
        2
  •  1
  •   Siddiqui    16 年前

    检查一下。

    http://developer.apple.com/iphone/library/samplecode/SpeakHere/index.html#//apple_ref/doc/uid/DTS40007802

    以下是录音的源代码,它支持在卸下耳机时暂停播放,这可能会对您有所帮助。

        3
  •  1
  •   marcc    16 年前

    这个 kAudioSessionProperty_AudioRoute 将始终返回耳机在第一代,因为没有其他路线。当耳机被拔下时,第二代和iphone以及更重要的是将支持另一条线路(扬声器),但是在第一代中有另一条线路。

    至少有了这个记录在案的api调用,您将无法检测到第1代ipod耳机的状态。

        4
  •  0
  •   JOA80    16 年前

    从Speakhere

    error=audiosessiongetproperty(kaudiosessionproperty_audioinputable,大小,&inputable); if(error)printf(“获取输入可用性时出错!%d\n“,错误); btn_record.enabled=(可输入)?是:不;

        5
  •  0
  •   Bhumit Mehta    12 年前

    上面的答案不起作用,因为它不编译,所以我张贴这个,因为这可能有助于一些人。你要做的就是找到音频线路。以下是音频的可能路径

    已知路线值:

    • “耳机”
    • “耳机”
    • “发言人”
    • “扬声器和麦克风”
    • “耳机和麦克风”
    • “头戴式耳机”
    • “接收器和麦克风”
    • “列队”

    希望这有帮助

      - (BOOL)isHeadsetPluggedIn {
    UInt32 routeSize = sizeof (CFStringRef);
    CFStringRef route;
    
    OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
                                              &routeSize,
                                              &route);
    
    
    
    if (!error && (route != NULL)) {
    
        NSString* routeStr = (__bridge NSString*)route;  //Convert CFStringRef to NSString
        NSRange routeRange = [routeStr rangeOfString:@"Head"];
        if (routeRange.location != NSNotFound){
             return YES;
        }
    
    }
        return NO;
    }