1.HID做什么用的?
在iOS蓝牙开发当中,现在的主流是使用蓝牙4.0,使用CoreBluetooth来进行开发,蓝牙4.0的好处就不多说了,大家自行google,HID也是一种蓝牙协议,单向传输数据,主要是做蓝牙键盘用的,比如罗技的蓝牙键盘k480。
2.是否可以直接获取HID的键值?
那么我们可以像蓝牙4.0一样直接获取HID的设备信息,跟发送的数据吗?很可惜,这是不行的,HID是系统层的,我们在应用层是没办法获取到她的任何数据跟信息的参考这里.
3.那么有没有其他的方法可以使用的?
答案是:有两种方法
1.使用IOKIT库是可以拿到的,但是这个库比较底层,而且使用了这个库的话,发布apple store 会被拒(只是搜索到有人这么说,楼主并没有验证真实性);
2.另外一种是在楼主玩弄公司的蓝牙键盘时想到的,键盘上有音乐控制键,可以控制iPhone的音乐播放,让我想到了apple耳机的线控,那么会不会两种控制的方法是一样的呢?话不多说,赶快验证一下;
4.使用AVAudioPlayer获取键值
首先我们需要成为第一响应者,而且开始接受远程控制事件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
ViewController *mainController=[[ViewController alloc]init];
_window.rootViewController=mainController;
//开始接受远程控制事件
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
//注册为第一响应者
[self becomeFirstResponder];
[_window makeKeyAndVisible];
return YES;
}
然后初始化播放器
- (AVAudioPlayer *)audioPlayer {
if (!_audioPlayer) {
NSString *urlStr=[[NSBundle mainBundle]pathForResource:@"music.mp3" ofType:nil];
NSURL *url=[NSURL fileURLWithPath:urlStr];
NSError *error=nil;
//初始化播放器,注意这里的Url参数只能是文件路径,不支持HTTP Url
_audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
//设置播放器属性
_audioPlayer.numberOfLoops=0;//设置为0不循环
_audioPlayer.delegate=self;
[_audioPlayer prepareToPlay];//加载音频文件到缓存
if(error){
NSLog(@"初始化播放器过程发生错误,错误信息:%@",error.localizedDescription);
return nil;
}
AVAudioSession *audioSession=[AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:YES error:nil];
}
return _audioPlayer;
}
设置事件监听
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
NSLog(@"eventType ============== %ld", (long)event.type);
NSLog(@"eventSubType ============== %ld", (long)event.subtype);
//在这里做你喜欢的事,嘿嘿嘿
}
最后播放器开始播放之后,操作耳机线控或者蓝牙键上的音乐控制,就可以获得相应的值,然后做你想执行的操作,但是event.subtype只有十个键值,这也算是一个小小的限制吧,以上!
我的目标是世界和平!
网友评论