1. 程式人生 > >ios 設定聲音和震動,單獨控制

ios 設定聲音和震動,單獨控制

一、今天專案中涉及了設定這快的聲音震動和響鈴,搞的頭大,以前搞過,只是簡單的呼叫系統的方法就可以實現,但是現在的公司要求,震動是震動,響鈴是響鈴,我看了微信,微信也是的分開的,做的很好,但是我就納悶了,這要怎搞,網上查閱了好多方法,都是下面的程式碼。但是這樣滿足不了我的專案需求,我就納悶的很,我設定了聲音和震動,為什麼在聲音響起的時候,他會呼叫震動,這點讓我很不解,於是網上查了好多。。。。網上程式碼90%都是這樣寫的

複製程式碼
 1         //線上單聊
 2         if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"isMessage_notf
"] isEqualToString:@"0"]) { 3 4 }else if([[[NSUserDefaults standardUserDefaults] objectForKey:@"isMessage_notf"] isEqualToString:@"1"] && [[[NSUserDefaults standardUserDefaults] objectForKey:@"isVoice_Set"] isEqualToString:@"1"]){ 5 6 AudioServicesPlaySystemSound (1007
);//聲音 7 8 }else if([[[NSUserDefaults standardUserDefaults] objectForKey:@"isMessage_notf"] isEqualToString:@"1"] && [[[NSUserDefaults standardUserDefaults] objectForKey:@"isVibration_Set"] isEqualToString:@"1"]) 9 { 10 AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);//
震動 11 }
複製程式碼

當然這是我專案中我的程式碼咯,不過我也是網上看到的,直接拉下來用的,果不其然,這樣寫上去了,被測試部門,給打回來了,說震動關閉了,怎麼還有震動,當時我抓狂啊,我也不知道為什麼啊,我以前就是這樣寫就好 了的,哎,所以,就開始上網查,百度,谷歌,stockoverflow,等等一些網站看,都沒用找到,最後在部落格園看到了,然後就按照他說的來寫了,他寫的是一個單例,然後再震動的時候呼叫震動的方法,響鈴的時候呼叫響鈴的方法,所以我就寫了一個單例來呼叫,果然解決了我的專案需求。。。

複製程式碼
 1 在 LxxPlaySound.h 中的程式碼
 2 
 3 #import <UIKit/UIKit.h>
 4 
 5 #import <AudioToolbox/AudioToolbox.h>
 6 
 7  
 8 
 9 @interface LxxPlaySound : NSObject
10 
11 {
12 
13     SystemSoundID soundID;
14 
15 }
16 
17  
18 
19 /**
20 
21  *  @brief  為播放震動效果初始化
22 
23  *
24 
25  *  @return self
26 
27  */
28 
29 -(id)initForPlayingVibrate;
30 
31  
32 
33 /**
34 
35  *  @brief  為播放系統音效初始化(無需提供音訊檔案)
36 
37  *
38 
39  *  @param resourceName 系統音效名稱
40 
41  *  @param type 系統音效型別
42 
43  *
44 
45  *  @return self
46 
47  */
48 
49 -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type;
50 
51  
52 
53 /**
54 
55  *  @brief  為播放特定的音訊檔案初始化(需提供音訊檔案)
56 
57  *
58 
59  *  @param filename 音訊檔名(加在工程中)
60 
61  *
62 
63  *  @return self
64 
65  */
66 
67 -(id)initForPlayingSoundEffectWith:(NSString *)filename;
68 
69  
70 
71 /**
72 
73  *  @brief  播放音效
74 
75  */
76 
77 -(void)play;
78 
79  
80 
81 @end
複製程式碼 複製程式碼
  1 在 LxxPlaySound.m中的程式碼
  2 
  3 #import "LxxPlaySound.h"
  4 
  5  
  6 
  7 @implementation LxxPlaySound
  8 
  9  
 10 
 11 -(id)initForPlayingVibrate
 12 
 13 {
 14 
 15     self = [super init];
 16 
 17     if (self) {
 18 
 19         soundID = kSystemSoundID_Vibrate;
 20 
 21     }
 22 
 23     return self;
 24 
 25 }
 26 
 27  
 28 
 29 -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type
 30 
 31 {
 32 
 33     self = [super init];
 34 
 35     if (self) {
 36 
 37         NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:resourceName ofType:type];
 38 
 39         if (path) {
 40 
 41             SystemSoundID theSoundID;
 42 
 43             OSStatus error =  AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &theSoundID);
 44 
 45             if (error == kAudioServicesNoError) {
 46 
 47                 soundID = theSoundID;
 48 
 49             }else {
 50 
 51                 NSLog(@"Failed to create sound ");
 52 
 53             }
 54 
 55         }
 56 
 57         
 58 
 59     }
 60 
 61     return self;
 62 
 63 }
 64 
 65  
 66 
 67 -(id)initForPlayingSoundEffectWith:(NSString *)filename
 68 
 69 {
 70 
 71     self = [super init];
 72 
 73     if (self) {
 74 
 75         NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
 76 
 77         if (fileURL != nil)
 78 
 79         {
 80 
 81             SystemSoundID theSoundID;
 82 
 83             OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);
 84 
 85             if (error == kAudioServicesNoError){
 86 
 87                 soundID = theSoundID;
 88 
 89             }else {
 90 
 91                 NSLog(@"Failed to create sound ");
 92 
 93             }
 94 
 95         }
 96 
 97     }
 98 
 99     return self;
100 
101 }
102 
103  
104 
105 -(void)play
106 
107 {
108 
109     AudioServicesPlaySystemSound(soundID);
110 
111 }
112 
113  
114 
115 -(void)dealloc
116 
117 {
118 
119     AudioServicesDisposeSystemSoundID(soundID);
120 
121 }
122 
123 @end
複製程式碼

然後在你的震動和聲音那裡開始來呼叫他。。只需引入他的標頭檔案,就萬事俱備,開始你的設定吧。。。你的設定就可以任你呼叫,想震動震動,想開鈴聲開鈴聲。。。。

如下程式碼演示呼叫震動

// 震動 首先要引入標頭檔案

  LxxPlaySound *playSound =[[LxxPlaySound alloc]initForPlayingVibrate]; 
 [playSound play];