一、今天项目中涉及了设置这快的声音震动和响铃,搞的头大,以前搞过,只是简单的调用系统的方法就可以实现,但是现在的公司要求,震动是震动,响铃是响铃,我看了微信,微信也是的分开的,做的很好,但是我就纳闷了,这要怎搞,网上查阅了好多方法,都是下面的代码。但是这样满足不了我的项目需求,我就纳闷的很,我设置了声音和震动,为什么在声音响起的时候,他会调用震动,这点让我很不解,于是网上查了好多。。。。网上代码90%都是这样写的

  1. //在线单聊
  2. if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"isMessage_notf"] isEqualToString:@""]) {
  3.  
  4. }else if([[[NSUserDefaults standardUserDefaults] objectForKey:@"isMessage_notf"] isEqualToString:@""] && [[[NSUserDefaults standardUserDefaults] objectForKey:@"isVoice_Set"] isEqualToString:@""]){
  5.  
  6. AudioServicesPlaySystemSound ();//声音
  7.  
  8. }else if([[[NSUserDefaults standardUserDefaults] objectForKey:@"isMessage_notf"] isEqualToString:@""] && [[[NSUserDefaults standardUserDefaults] objectForKey:@"isVibration_Set"] isEqualToString:@""])
  9. {
  10. AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);//震动
  11. }

当然这是我项目中我的代码咯,不过我也是网上看到的,直接拉下来用的,果不其然,这样写上去了,被测试部门,给打回来了,说震动关闭了,怎么还有震动,当时我抓狂啊,我也不知道为什么啊,我以前就是这样写就好 了的,哎,所以,就开始上网查,百度,谷歌,stockoverflow,等等一些网站看,都没用找到,最后在博客园看到了,然后就按照他说的来写了,他写的是一个单例,然后再震动的时候调用震动的方法,响铃的时候调用响铃的方法,所以我就写了一个单例来调用,果然解决了我的项目需求。。。

  1. LxxPlaySound.h 中的代码
  2.  
  3. #import <UIKit/UIKit.h>
  4. #import <AudioToolbox/AudioToolbox.h>
  5.  
  6. @interface LxxPlaySound : NSObject
  7. {
  8. SystemSoundID soundID;
  9. }
  10.  
  11. /**
  12.  
  13. * @brief 为播放震动效果初始化
  14. * @return self
  15. */
  16.  
  17. -(id)initForPlayingVibrate;
  18. /**
  19. * @brief 为播放系统音效初始化(无需提供音频文件)
  20. *
  21. * @param resourceName 系统音效名称
  22. * @param type 系统音效类型
  23. * @return self
  24. */
  25.  
  26. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type;
  27. /**
  28. * @brief 为播放特定的音频文件初始化(需提供音频文件)
  29. * @param filename 音频文件名(加在工程中)
  30. * @return self
  31. */
  32.  
  33. -(id)initForPlayingSoundEffectWith:(NSString *)filename;
  34. /**
  35. * @brief 播放音效
  36. */
  37.  
  38. -(void)play;
  39. @end
  1. LxxPlaySound.m中的代码
  2.  
  3. #import "LxxPlaySound.h"
  4. @implementation LxxPlaySound
  5. -(id)initForPlayingVibrate
  6. {
  7.  
  8. self = [super init];
  9. if (self) {
  10. soundID = kSystemSoundID_Vibrate;
  11. }
  12. return self;
  13. }
  14.  
  15. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type
  16. {
  17.  
  18. self = [super init];
  19.  
  20. if (self) {
  21.  
  22. NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:resourceName ofType:type];
  23.  
  24. if (path) {
  25.  
  26. SystemSoundID theSoundID;
  27.  
  28. OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &theSoundID);
  29.  
  30. if (error == kAudioServicesNoError) {
  31.  
  32. soundID = theSoundID;
  33.  
  34. }else {
  35.  
  36. NSLog(@"Failed to create sound ");
  37.  
  38. }
  39.  
  40. }
  41. }
  42.  
  43. return self;
  44.  
  45. }
  46.  
  47. -(id)initForPlayingSoundEffectWith:(NSString *)filename
  48. {
  49.  
  50. self = [super init];
  51.  
  52. if (self) {
  53.  
  54. NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
  55.  
  56. if (fileURL != nil)
  57. {
  58.  
  59. SystemSoundID theSoundID;
  60. OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);
  61.  
  62. if (error == kAudioServicesNoError){
  63.  
  64. soundID = theSoundID;
  65.  
  66. }else {
  67.  
  68. NSLog(@"Failed to create sound ");
  69.  
  70. }
  71. }
  72. }
  73.  
  74. return self;
  75.  
  76. }
  77.  
  78. -(void)play
  79. {
  80. AudioServicesPlaySystemSound(soundID);
  81. }
  82.  
  83. -(void)dealloc
  84. {
  85.  
  86. AudioServicesDisposeSystemSoundID(soundID);
  87. }
  88.  
  89. @end

然后在你的震动和声音那里开始来调用他。。只需引入他的头文件,就万事俱备,开始你的设置吧。。。你的设置就可以任你调用,想震动震动,想开铃声开铃声。。。。

如下代码演示调用震动,当然如果震动和声音一起就要换成soundID换位1007 。。还有如果你要声音的话,就用网上

  1. // 震动 首先要引入头文件
  2.  
  3. LxxPlaySound *playSound =[[LxxPlaySound alloc]initForPlayingVibrate];
     [playSound play];

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

可以加qq群:370624831

最近好多人问我这个问题,我写了一个demo,你们可以去 CSDN 下载,下载地址:iOS单独控制 声音 和 震动

ios 设置声音和震动,单独控制的更多相关文章

  1. Android Notification 的声音和震动

    我们在Android系统发送一条Notification的时候,经常需要通过震动或声音来提醒用户.如何为Notification设置声音和震动了.大致思路有: - AndroidNotificatio ...

  2. ios 设置亮度、声音;调用发短信、邮件、打电话

    一,设置亮度 [[UIScreen mainScreen] setBrightness:0.5];//0.0~1.0 二,设置声音 1,添加 MediaPlayer.framework 框架 2,在需 ...

  3. Nginx多站点虚拟主机实现单独启动停止php-fpm、单独控制权限设置

    Nginx多站点虚拟主机实现单独启动停止php-fpm.单独控制权限设置 来源:osyunwei.com 作者:qihang01 发表于:2012-08-19 21:26 点击: 说明: 站点1:bb ...

  4. iOS 设置页面的代码编写

    突然觉得好久没有更新博客了,今天就想把自己的项目中的一些功能和常用的模块写出来给大家参考一下... 这是我的二个项目中的不同的设置界面,第一个设置的那个按钮是 用的开关switch ,当然这个就容易一 ...

  5. iOS设置状态栏样式

    iOS设置状态栏样式可以使用两种方式. 方式一: 直接在需要改变默认状态栏样式的控制器中实现一个方法(其他任何事情都不用做): // 返回状态栏的样式 - (UIStatusBarStyle)pref ...

  6. iOS设置拍照retake和use按钮为中文简体

    iOS设置拍照retake和use按钮为中文简体,设置有两种方式一个是代码直接控制,第二就是xcode配置本机国际化为“china”(简体中文). 本文重点要说的是第二种,这样配置有两个好处,一是操作 ...

  7. iOS中声音采集与播放的实现(使用AudioQueue)

    都说iOS最恶心的部分是流媒体,其中恶心的恶心之处更在即时语音. 所以我们先不谈即时语音,研究一下,iOS中声音采集与播放的实现. 要在iOS设备上实现录音和播放功能,苹果提供了简单的做法,那就是利用 ...

  8. iOS设置app应用程序文件共享

    1.iOSapp应用程序文件共享 当我们用itnues连接到设备时,在应用程序栏目下面,文件共享下,点击 对应的程序,即可以在程序右边栏目里面看到应用程序共享的数据, 此时,我们可以通过右下角的 添加 ...

  9. IOS 设置定时器

    IOS 设置定时器  自动滚动视图 定时发送坐标信息 即时显示 时钟 NSTimer *timer; - (void)start {//1second 调用一次 timer = [NSTimer sc ...

随机推荐

  1. eclipse连接mysql,插入数据时乱码

    问题:如果eclipse中项目的编码方式为utf-8 插入数据后,在数据库中查看后,汉字出现乱码情况 解决方法: 1.在获取连接的时候将conn = DriverManager.getConnecti ...

  2. BLOCK封装带菊花的网络请求

    #import <Foundation/Foundation.h> @class HttpRequestManager; typedef void(^httpRequestBlock) ( ...

  3. LeetCode-Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  4. Ext.Net 学习随笔 003 Panel基本使用

    Panel() 1.使用Content和Html属性设置Panel内容 前台View代码 @(X.Panel() .ID("panel1") .Width() .Height() ...

  5. POJ 3311 Hie with the Pie (状压DP)

    dp[i][j][k] i代表此层用的状态序号 j上一层用的状态序号 k是层数&1(滚动数组) 标准流程 先预处理出所有合法数据存在status里 然后独立处理第一层 然后根据前一层的max推 ...

  6. 印刷电路板(PCB)的材料

    以玻璃为基础材料的板材可以在高达150℃到250℃的温度下使用.可选的介质材料有: FR4,介电常数ε0为4.6 环氧材料,介电常数ε0为3.9: 聚酰亚胺,介电常数ε0为4.5. 另外,以聚四氟乙烯 ...

  7. (转) Artificial intelligence, revealed

    Artificial intelligence, revealed Yann LeCunJoaquin Quiñonero Candela It's 8:00 am on a Tuesday morn ...

  8. Python的标准输出

    遇到什么就添加到这里来. 首先,是最基本的. print "Number is %d %f %s"%(intA,floatB,stringC) 如果对浮点数的精度有所要求的话,比如 ...

  9. ASP.NET Web API - ASP.NET MVC 4 系列

           Web API 项目是 Windows 通信接口(Windows Communication Foundation,WCF)团队及其用户激情下的产物,他们想与 HTTP 深度整合.WCF ...

  10. C# Marshal.GetActiveObject() 遭遇 HRESULT:0x800401E3 (MK_E_UNAVAILABLE))

    解决办法: 勿以管理员权限运行Visual Studio