美文网首页
iOS BlueTooth HID(Human Interfac

iOS BlueTooth HID(Human Interfac

作者: 万梦侠 | 来源:发表于2017-03-06 20:29 被阅读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

    相关文章

      网友评论

          本文标题:iOS BlueTooth HID(Human Interfac

          本文链接:https://www.haomeiwen.com/subject/yjbugttx.html