iOS BlueTooth HID(Human Interfac

2017-03-06  本文已影响0人  万梦侠

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只有十个键值,这也算是一个小小的限制吧,以上!

我的目标是世界和平!

参考资料点击这里
talk is cheap, show me the code

上一篇下一篇

猜你喜欢

热点阅读