转载

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];

这是我苦逼了二天才解决的问题,只因我太菜,我大哥一直在帮我,谢谢他 @平淡的我 。。。

希望可以帮到一些像我这样的苦逼的码农,如有不清楚的尽情来找我,互相学习,共同努力!! day day up !!!

正文到此结束
Loading...