相关疑难解决方法(0)

如何以编程方式感知iPhone静音开关?

我似乎无法在SDK中找到如何以编程方式感知iPhone上的静音按钮/开关.当我的应用程序播放背景音乐时,它会正确响应音量按钮,而我没有任何代码可以遵循,但是,当我使用静音开关时,它只是继续播放.

如何测试静音的位置?

(注意:我的程序有自己的静音开关,但我希望物理开关覆盖它.)

谢谢!

audio ios avaudiosession

44
推荐指数
5
解决办法
4万
查看次数

在iOS5中检测静音模式?

我过去使用过这种方法来检测是否启用了静默开关:

- (BOOL)silenced {
    #if TARGET_IPHONE_SIMULATOR
    // return NO in simulator. Code causes crashes for some reason.
    return NO;
    #endif

    CFStringRef state;
    UInt32 propertySize = sizeof(CFStringRef);
    AudioSessionInitialize(NULL, NULL, NULL, NULL);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);

    if(CFStringGetLength(state) > 0)
        return NO;
    else
        return YES;
}
Run Code Online (Sandbox Code Playgroud)

这不再适用于iPad或iPhone上的iOS5.这是一个已知的问题?我无法在堆栈溢出或Apple dev论坛上找到任何答案.

希望你能帮忙......

iphone silent ipad ios ios5

24
推荐指数
1
解决办法
1万
查看次数

检测振铃/静音开关位置变化

我正在开发一个我想要的应用程序:

  1. 在播放音频时尊重铃声/静音开关,和

  2. 当铃声/静音开关设置为静音时,显示一个图标,表示声音已静音.

要求1很简单:我使用的AVAudioSessionSoloAmbient是我的应用程序的音频会话类别,因此当响铃/静音开关关闭时,我的音频会话将自动静音.

要求2似乎相当困难,因为我需要某种回调,通知或KVO,这将允许我监控交换机的位置,但Apple明确表示它不愿意提供正式公开的方式来做到这一点.也就是说,如果我能找到一种非侵入性的方式来监控交换机的位置,即使是技术上被禁止的方式(例如内部NSNotification),我也愿意由Apple运行它.

此外,我宁愿不实施我在别处找到的一些民意调查解决方案.有关示例,请参阅"相关问题"部分.


我学到了什么(又名什么不行)

  • 至少在iOS版本4和5中,有一个技巧可以通过观察当前音频会话的路由属性来获取交换机的位置.除了被AVAudioSession班级弃用之外,我还可以确认这个技巧不再是一个选择.当切换振铃/静音开关时,当前路由(包括已弃用的Audio SessionAPI和当前AVAudioSession类的C函数报告)都不会更改.

  • AVSystemController是一个似乎有很多承诺的内部类.调用确实- (BOOL)toggleActiveCategoryMuted会使sharedAVSystemController我的应用程序的音频静音.此外,共享单例AVSystemController_SystemVolumeDidChangeNotification在通过音量按钮更改系统音量时发布通知.不幸的是,这个通知不是为响应环/静音开关的变化而发布的(尽管这个可疑的来源说它应该).

  • 据我所知,有没有 NSNotification š张贴由任何对象响应于环/无声开关位置的变化.在将自己添加为默认中心中所有通知的观察者后,我得出了这个结论:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:nil object:nil];
    
    Run Code Online (Sandbox Code Playgroud)

    然后切换响铃/静音开关.没有.

  • 该AVSystemController课程有一个很有前途的签名方法:

    - (BOOL)getActiveCategoryMuted:(BOOL*)arg1;
    
    Run Code Online (Sandbox Code Playgroud)

    但是,这有两个问题:

    1. 响应于切换振铃/静音开关,返回值和BOOL指向的值arg1似乎都没有变化.
    2. 由于方法签名,这种方法(据我所知)并不是KVO的候选者.

  • 我怀疑某个对象GSEventRef在更改静音开关时会发送一些其他对象,因为我在事件类型的声明中看到以下内容:

    kGSEventRingerOff = 1012,
    kGSEventRingerOn = 1013,
    
    Run Code Online (Sandbox Code Playgroud)

    但是,我很确定我无法拦截这些消息,即使我可以,这也不仅仅是"一点点"的干扰.


为什么我相信这是可能的

简单地说:Instagram应用程序基本上表现出这种行为.观看视频时,它会考虑铃声/静音开关的设置,但在开关关闭时会显示一个图标.图标消失并在移动开关后立即重新出现,我认为它必须是基于事件的,而不是轮询.


相关问题

iphone audio avaudioplayer ios ios7.1

12
推荐指数
0
解决办法
3617
查看次数

在iOS 5中检测iPhone静音开关

我知道Apple没有提供检测iOS 5中 iPhone mute/silence开关状态的方法.但是,我尝试了其他地方提到的技术,通过播放音频文件并测量其运行时来检测这一点.然而,即使我的iPhone被静音,音频文件仍然在整个持续时间内播放.我正在使用和计算之前被调用的时间.你知道播放音频文件的技巧吗?如果手机静音,它会提前/立即完成?[AVAudioPlayer play]audioPlayerDidFinishPlaying

iphone objective-c mute ios

6
推荐指数
1
解决办法
8739
查看次数

在iOS 7中检测静音模式

有没有办法在iOS 7中检测静音模式?

以下代码不适用于iOS 5或更高版本

-(BOOL)silenced {
     #if TARGET_IPHONE_SIMULATOR
         // return NO in simulator. Code causes crashes for some reason.
         return NO;
     #endif

    CFStringRef state;
    UInt32 propertySize = sizeof(CFStringRef);
    AudioSessionInitialize(NULL, NULL, NULL, NULL);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
    if(CFStringGetLength(state) > 0)
            return NO;
    else
            return YES;

   }
Run Code Online (Sandbox Code Playgroud)

iphone ios ios7

6
推荐指数
1
解决办法
2万
查看次数

声音不能在iPad扬声器上播放,但在耳机和iPod Touch/iPhone扬声器上工作正常

我知道这是一个已被问过多次的问题,我已经检查了大部分与SO相关的答案,但我没有找到解决问题的正确答案.

这是问题所在:

当某个事件被触发时,我试图在游戏中播放一个mp3文件(最多只有2秒),我使用AudioPlayer这样做,下面是代码块:

NSError *error;
AVAudioPlayer *audioPlayer = [[[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource: @"ding" withExtension: @"mp3"] error:&error] autorelease];
if (error)  {
    NSLog(@"Error creating audio player: %@", [error userInfo]);
}
else {
    BOOL success = [audioPlayer play];
    // This always is "Play sound succeeded"
    NSLog(@"Play sound %@", success ? @"succeeded" : @"failed");
}
Run Code Online (Sandbox Code Playgroud)

当我在iPhone 4s,iTouch 3/4中运行此代码时,声音总是很清晰,但在iPad 1或iPad2中,扬声器没有声音.但是当我插入耳机时,发生了一些奇怪的事情,我的耳机有声音!iPad未处于静音模式且URL正确无误.

我很困惑为什么会这样.

PS:我尝试了以下代码(从HERE获得)输出音频输出端口类型:

CFDictionaryRef asCFType = nil;
UInt32 dataSize = sizeof(asCFType);
AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &dataSize, &asCFType);
NSDictionary *easyPeasy = (NSDictionary *)asCFType;
NSDictionary *firstOutput = (NSDictionary …
Run Code Online (Sandbox Code Playgroud)

avaudioplayer ipad ios

5
推荐指数
1
解决办法
2850
查看次数

如何使用目标c打开/关闭iPhone的静音模式

我正在创建一个应用程序,我想在其中检测到iphone是否处于静音模式.

我已经想到了下面的链接

使用AVAudioPlayer检测iPhone的响铃/静音/静音开关不起作用?

在iPhone上切换静音模式和铃声模式

很多人说这是违反iPhone政策的.但我看到很多应用程序也提供此功能

检查以下应用链接

https://itunes.apple.com/us/app/silentalert/id506092189?mt=8

我也想改变iPhone的静音模式,就像上面的应用程序一样.

有人知道吗?

iphone objective-c silent utility-method

5
推荐指数
1
解决办法
1837
查看次数