你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS 開發 鈴聲與振動調用 單獨分開調用

iOS 開發 鈴聲與振動調用 單獨分開調用

編輯:IOS開發基礎

1、iOS 中調用系統鈴聲與振動

在iOS APP開發中,有時我們需要調用手機系統鈴聲與振動,用以作消息提醒。這個實現起來並不難,只需要調用iOS框架即可。

在需要調用我類頭文件導入:#import
然後在需要的地方調用方法即可,如:

其中這個soundID號可以從蘋果官方網站找到:http://iphonedevwiki.net/index.php/AudioServices
鈴聲振動需要在真機測試才可實現,具體實現如下:

    鈴聲:
    SystemSoundID soundID = 1007;
    AudioServicesPlaySystemSound(soundID);

    振動:
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

就這樣簡單就可以設置鈴聲與振動了。

2、如何設置app的鈴聲與系統設置的鈴聲一致?

但是這裡你可能會發現一個問題:這裡是寫死的鈴聲,寫了什麼soundID號就響哪個,用戶無法通過在手機設置裡的聲音設置裡更換,但我們想要的偏偏就是這種效果:設置這個soundID不是死的,它是與系統默認鈴聲一致的,當用戶通過設置裡的聲音設置更改系統默認鈴聲時,對應app裡的鈴聲也隨著更改,拿安卓版QQ舉個例子就可以發現:

1859703-b020b5332b44a3c2.png

安卓版QQ設置消息鈴聲與系統默認鈴聲一致

對的,安卓是可以實現的,只要在手機設置裡更換這個系統默認鈴聲,對應QQ的消息提示音也會隨著改變。
於是,我瘋狂地百度簡書,試圖去獲取蘋果手機系統設置的短信鈴聲、郵件鈴聲、其他鈴聲等信息,最終一無所獲。(不知道有沒有人知道如何獲取到)
最後我打開蘋果版QQ查看消息鈴聲的設置,發現iOS版的QQ是沒有設置為系統鈴聲這一選項的,與安卓不一樣,也就是說iOS版的QQ也沒有實現我上面提到的這個功能,所以,姑且認為iOS沒有這個權限去獲取這部分系統信息吧。

3、單獨控制鈴聲與振動

鈴聲設置完之後就該測試了,測試之前當然要確保手機並無開啟靜音模式 && 同時務必要開啟振動模式!!

如果開啟了靜音狀態,則無論如何也不會響的;同理,如果關閉了振動模式,無論如何也是不會振動的。

1859703-b277f1c7a01f99e5.png

手機設置-->>聲音設置

確保手機並無開啟靜音模式同時開啟了兩項振動模式(靜音模式振動/響鈴模式振動--->>在手機設置-->>聲音設置裡面可以打開)後就可以測試了,這裡我發現當我只調用了鈴聲 而並無調用振動的方法,手機就會既響鈴又振動了,為什麼呢?----->>>因為我開啟了“響鈴模式振動”啊,所以理所當然會振動啊!!

但現在我的需求就不是這樣的,通常情況下,我們的手機是保持在響鈴模式下的並且開啟振動模式的,在這樣的響鈴振動模式下,我想要的需求是單獨控制,響鈴是響鈴,振動是振動,同時是同時,這樣子。那就去把“響鈴模式振動”關了吧,好,關了之後發現在單單調用響鈴時確實是鈴響了且沒有振動,很高興。下一步我又想要單單振動,我重新去調用振動的方法,不要響鈴,發現振動不振了,因為此時手機為響鈴模式啊,而剛才我又已經將“響鈴模式振動”給關了,所以當然不會振了啊,,,怎麼辦呢????.......

於是又上了百度,百度上有人提出的解決辦法是將這些調用鈴聲的方法封裝到一個單例裡去,然後分別調用就可以了。(具體如鏈接裡說的:http://www.jianshu.com/p/ce8f1a890892     也可以下該作者文章裡提到的demo,他的demo裡還有一個可以判斷手機當前是否開啟了靜音模式的類,感覺不怎麼實用,因為如果是靜音模式下我正好又關了振動模式,你還怎麼振?同時在非靜音模式下我開啟了振動,還不是一樣的振?但是呢也有好處:就是可以判斷在靜音時選擇振動(如果可以振的話,否則響鈴,大神寫得不錯!))

其實我發現不一定要封裝成所謂的單例的,只要把:

 只要把下面這句:
    AudioServicesPlaySystemSound(soundID);

    改成下面這樣:
    NSString *path = [NSString stringWithFormat:@"/System/Library/Audio/UISounds/%@.%@",@"sms-received1",@"caf"];
    OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path],&soundID);
         if (error != kAudioServicesNoError) {//獲取的聲音的時候,出現錯誤
             NSLog(@"靜音");
             soundID = nil;
         }
         AudioServicesPlaySystemSound(soundID);

    就可以了,其中“sms-received1”為鈴聲的名字,可在前面提到的蘋果官網裡找,“caf”為鈴聲格式,這裡通過鈴聲名字轉換成soundID後就會莫名地在響鈴兼振動下單獨地響鈴了。

然後振動的地方再單獨調振動就可以了。
當然,如果想要同時響鈴振動就可以單獨寫那句AudioServicesPlaySystemSound(soundID);或者連振動那句一起寫好了。



文章轉自 Kiwir_Tank的簡書
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved