亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用AVAudioPlayer檢測iPhone的“鈴聲” /“靜音” /“靜音”開關不起作用?

使用AVAudioPlayer檢測iPhone的“鈴聲” /“靜音” /“靜音”開關不起作用?

iOS
月關寶盒 2019-10-26 13:24:48
我嘗試使用這些方法來嘗試檢測“振鈴/靜音”開關是否處于活動狀態:如何以編程方式感應iPhone靜音開關?AVAudioSession類別無法按文檔要求運行但是在我的iPhone 4上,“狀態”值始終為“揚聲器”(而CFStringGetLength(state)返回的長度值始終為7)。有人成功使用過此方法嗎?如果是,請問哪種設備和SDK版本?我這樣稱呼它:- (BOOL)deviceIsSilenced {    CFStringRef state;    UInt32 propertySize = sizeof(CFStringRef);    OSStatus audioStatus = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);    if (audioStatus == kAudioSessionNoError) {        NSLog(@"audio route: %@", state) // "Speaker" regardless of silent switch setting, but "Headphone" when my headphones are plugged in        return (CFStringGetLength(state) <= 0);    }    return NO;}-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    AVAudioSession *audioSession = [AVAudioSession sharedInstance];    audioSession.delegate = self;    [audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];    [audioSession setActive:YES error:nil];    NSLog(@"muted? %i", [self deviceIsSilenced]);    ...}我當時在想,當電話上的物理開關切換時,可能會觸發其他(更準確)的kAudioSessionProperty事件。有人有想法么?順便說一句,我在我的[AVAudioSession sharedInstance]中使用了AVAudioSessionCategoryAmbient類別。
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

我瀏覽了這個VSSilentSwitch庫。
對我不起作用(當您開始實際使用音頻時不起作用)。
我在考慮他是如何做到的,然后意識到,當我們沉默時,幾乎在聲音開始播放后就立即調用音頻完成呼叫。
更具體一點:
使用AudioServicesPlaySystemSound播放的系統聲音將在開始播放后立即完成播放。
當然,這僅適用于尊重靜音開關的音頻類別(默認情況下AVAudioSessionCategoryAmbient遵守它)。
因此,訣竅是創建系統聲音,最好是無聲聲音,并一遍又一遍地播放它,同時檢查從播放到完成所花費的時間(使用安裝安裝過程AudioServicesAddSystemSoundCompletion)。
如果完成過程很快被調用(允許某個閾值),則表示靜音開關已打開。
此技巧有很多警告,最大的一個事實是它不能在所有音頻類別上使用。
如果您的應用程序在后臺播放音頻-請確保您在后臺播放時停止此測試,否則您的應用程序將永遠在后臺運行(并且也會被蘋果拒絕)。

查看完整回答
反對 回復 2019-10-26
  • 3 回答
  • 0 關注
  • 674 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號