控制iphone震动强度和时间的private api
来源:互联网 发布:网络印刷电商平台 编辑:程序博客网 时间:2024/06/04 18:22
主要调用AudioServicesPlaySystemSoundWithVibration这个private api,传入一个含有时间和强度的dictionary即可。
注意要引入AudioToolbox.framework。在iOS6,iOS7上测试通过。
private api有风险,注意不要在上架app中使用。
1 NSMutableDictionary* dict = [NSMutableDictionary dictionary]; 2 NSMutableArray* arr = [NSMutableArray array ]; 3 4 [arr addObject:[NSNumber numberWithBool:YES]]; //vibrate for 2000ms 5 [arr addObject:[NSNumber numberWithInt:2000]]; 6 7 8 [dict setObject:arr forKey:@"VibePattern"]; 9 [dict setObject:[NSNumber numberWithFloat:0.3] forKey:@"Intensity"];10 11 AudioServicesPlaySystemSoundWithVibration(4095,nil,_buff);
写了一个封装demo
.h
1 // 2 // YANGZShaking.h 3 // shaking 4 // 5 // Created by mmm on 14-1-11. 6 // Copyright (c) 2014年 yangz. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h>10 11 @interface YANGZVibePattern : NSObject12 + (YANGZVibePattern *)PatternWithIntensity:(float)intensity time:(NSUInteger)time isVibe:(BOOL)isVibe;13 @property (nonatomic) bool isV;14 @property (nonatomic) float intensity;15 @property (nonatomic) NSUInteger time;16 17 @end18 19 @interface YANGZShaking : NSObject20 21 22 - (YANGZShaking *)initWithPattern:(NSArray *)patterns;23 - (YANGZShaking *)initWithFile:(NSString *)file;24 - (YANGZShaking *)initWithLoop:(NSUInteger)vibe pause:(NSUInteger)pause;25 - (void)play;26 - (void)stop;27 28 @end
.m
1 // 2 // YANGZShaking.m 3 // shaking 4 // 5 // Created by mmm on 14-1-11. 6 // Copyright (c) 2014年 yangz. All rights reserved. 7 // 8 9 10 #import "YANGZShaking.h" 11 #import <AudioToolbox/AudioToolbox.h> 12 13 14 @implementation YANGZVibePattern 15 + (YANGZVibePattern *)PatternWithIntensity:(float)intensity time:(NSUInteger)time isVibe:(BOOL)isVibe{ 16 YANGZVibePattern *pattern = [YANGZVibePattern new]; 17 pattern.isV = isVibe; 18 pattern.intensity = intensity; 19 pattern.time = time; 20 return pattern; 21 }; 22 @end 23 24 25 @interface YANGZShaking(){ 26 NSArray *_patterns; 27 NSMutableDictionary *_buff; 28 bool _isRepeat; 29 } 30 @end 31 32 33 @implementation YANGZShaking 34 35 36 - (YANGZShaking *)initWithPattern:(NSArray *)patterns{ 37 if ([super init]) { 38 _patterns = [[NSMutableArray alloc] initWithArray:patterns copyItems:YES]; 39 _buff=nil; 40 _isRepeat=NO; 41 } 42 return self; 43 } 44 45 46 - (YANGZShaking *)initWithFile:(NSString *)file{ 47 if ([super init]) { 48 _patterns = [NSMutableArray arrayWithContentsOfFile:file]; 49 _buff=nil; 50 _isRepeat=NO; 51 } 52 return self; 53 } 54 - (YANGZShaking *)initWithLoop:(NSUInteger)vibe pause:(NSUInteger)pause{ 55 if ([super init]) { 56 YANGZVibePattern *vibePattern = [YANGZVibePattern PatternWithIntensity:0.3 time:vibe isVibe:YES]; 57 YANGZVibePattern *pausePattern = [YANGZVibePattern PatternWithIntensity:0.9 time:pause isVibe:NO]; 58 59 _patterns = @[vibePattern,pausePattern]; 60 _buff=nil; 61 _isRepeat=YES; 62 } 63 return self; 64 65 66 } 67 - (void)play{ 68 [NSThread detachNewThreadSelector:@selector(loop) toTarget:self withObject:nil]; 69 } 70 - (void)stop{ 71 72 } 73 74 75 - (void)loop{ 76 NSUInteger i=0; 77 while (YES) { 78 NSUInteger pause = 0; 79 YANGZVibePattern *pattern = _patterns; 80 if (!pattern.isV) { 81 } 82 else{ 83 [self prepareBuffWithPattern:pattern]; 84 [self performSelectorOnMainThread:@selector(systemPlay) withObject:nil waitUntilDone:NO]; 85 } 86 [NSThread sleepForTimeInterval:pattern.time*1.0f/1000]; 87 i++; 88 if (i==[_patterns count] && !_isRepeat) { 89 break; 90 } 91 i=i%[_patterns count]; 92 } 93 } 94 - (void)prepareBuffWithPattern:(YANGZVibePattern *)pattern{ 95 NSMutableDictionary* dict = [NSMutableDictionary dictionary]; 96 NSMutableArray* arr = [NSMutableArray array ]; 97 98 [arr addObject:[NSNumber numberWithBool:YES]]; //vibrate for 2000ms 99 [arr addObject:[NSNumber numberWithInt:pattern.time]];100 101 102 103 [dict setObject:arr forKey:@"VibePattern"];104 [dict setObject:[NSNumber numberWithFloat:pattern.intensity] forKey:@"Intensity"];105 _buff = dict;106 }107 - (void)systemPlay{108 NSLog(@"system play @%");109 110 AudioServicesPlaySystemSoundWithVibration(4095,nil,_buff);111 }112 @end
0 0
- [原创]控制iphone震动强度和时间的private api
- 控制iphone震动强度和时间的private api
- android 控制震动强度
- 展讯 物理按键添加震动效果 和调节 震动强度
- IOS开发之 ---- 振动强度和时间(私有api)
- IPhone 系统声音API(短音 震动)
- IOS Iphone震动 和 提示音
- android触屏震动以及震动强度
- 修改文件增加iPhone来短信震动时间
- 震动API
- WM手机震动和LED控制
- ios 设置声音和震动,单独控制
- iPhone开发之-private API-导出私有API
- 使用class-dump来生成iphone private api 头文件
- 如何使iPhone震动
- 让iphone震动起来
- Objective-C中对IPhone设备震动的调用
- unity调用Android Api实现短信发送和震动功能
- 运行R脚本(转)
- qooxdoo通用javascript框架手册(二)
- SDWebImage异步加载图片及缓存的管理与清理
- 类似 Google Tips 页面的卡片式提示和翻转特效
- Linux 环境下部署Hadoop 2.x,建议尝试64位系统下进行本地编译的安装方式
- 控制iphone震动强度和时间的private api
- 2. 动态分配字符串
- ios--手势--点击某个View隐藏键盘
- StringBuilder替代字符串的连接"+"
- bloom filter
- Leetcode--Validate Binary Search Tree
- uboot makefile分析
- C++调用C# com组件:一个完整的的小例子
- Servlet ServletContextListene 和HttpSessionListener 作用