ios 設定聲音和震動,單獨控制
阿新 • • 發佈:2019-02-07
一、今天專案中涉及了設定這快的聲音震動和響鈴,搞的頭大,以前搞過,只是簡單的呼叫系統的方法就可以實現,但是現在的公司要求,震動是震動,響鈴是響鈴,我看了微信,微信也是的分開的,做的很好,但是我就納悶了,這要怎搞,網上查閱了好多方法,都是下面的程式碼。但是這樣滿足不了我的專案需求,我就納悶的很,我設定了聲音和震動,為什麼在聲音響起的時候,他會呼叫震動,這點讓我很不解,於是網上查了好多。。。。網上程式碼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];