iOS-蓝牙拍照

需求:使用蓝牙快门遥控器控制拍照 APP 进行拍照。

解决思路

苹果手机系统相机可以通过按音量键进行拍照,目前市面上绝大部分的手机蓝牙快门遥控器都是基于这一点实现蓝牙拍照的,所以我们只需要监听系统 音量的变化 就可以间接的给自定义的相机适配蓝牙拍照,而不需要通过蓝牙的扫描、连接、订阅等来与蓝牙设备进行通讯。

1.导入头文件

#import <AVFoundation/AVFoundation.h>

2.监听音量变化

    //监听系统音量变化,用于蓝牙拍照
    AVAudioSession *session = [AVAudioSession sharedInstance];
    
    [session setCategory:AVAudioSessionCategoryAmbient error:nil];
    
    [session setActive:YES error:nil];
    
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    
    //监听系统音量
    [HTNotificationCenter addObserver:self selector:@selector(volumeChangeNotification:)name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];

3.通知

/**
 蓝牙控制相机拍照
 */
- (void)volumeChangeNotification:(NSNotification *)noti {
    
    NSDictionary *userInfo = noti.userInfo;
    
    if ([userInfo[@"AVSystemController_AudioVolumeChangeReasonNotificationParameter"] isEqualToString:@"ExplicitVolumeChange"]) {//系统音量发生了变化
        //拍照处理
    }
}

新的问题及解决

因为蓝牙设备控制的是系统音量,所以在使用的时候,会弹出系统音量变化的弹窗,这是我们不需要的,所以下一步就是隐藏掉这个弹窗。

1.控制系统音量的接口在 MediaPlayer 库中,所以我们需要导入这个库

1558506595700.jpg

2.导入头文件

#import <MediaPlayer/MPVolumeView.h>

3.想要隐藏音量变化的视图,我们只需要把 MPVolumeView 的实例添加到当前视图中,并且设置 frame 到视图外即可,方法如下:

    //隐藏系统音量变化视图
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(-100, -100,100,100)];
    
    [self.view addSubview:volumeView];

另外,MPVolumeView 中负责控制音量的是它的子视图 MPVolumeSlider,而这个类并未对外公开,所以要去控制它,需要遍历 MPVolumeSlider 的子视图,把它找出来,并赋值,然后就可以控制音量了

MPVolumeView *volumeView   = [MPVolumeView alloc] init];

UISlider *volumeViewSlider = nil;

for (UIView *view in volumeView.subviews) {
    
    if ([view.class.description isEqualToString:@"MPVolumeSlider"]) {
        volumeViewSlider = (UISlider *)view;
        break;
    }
}

// 设置系统音量,区间为 0.0f ~ 1.0f
[volumeViewSlider setValue:0.3f animated:NO];

// 立即生效
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS 苹果官方Demo合集 字数10517阅读21059评论18喜欢144 其实, 开发了这么久, 不得不说, ...
    bingo居然被占了阅读 13,487评论 2 31
  • 圣经中有一句话是这样说的“凡有的,还要加给他,叫他有余;凡没有的,连他所有的也要夺去。”(马太福音13:12) 这...
    破崖青竹阅读 4,367评论 0 2
  • 以前不喜欢在身上戴饰品 结婚时买了这么个小东西 后来发现它并不妨碍我的生活 就不摘下来了 锤子科技李剑叶的作品
    Jeszny阅读 1,599评论 0 0
  • 前几天跟好友聚餐,因为是多年好友,所以有喝点小酒的习惯,但是生性对各种酒不感冒的我拿着杯柠檬水,可怜巴巴着对面的几...
    王姑娘sunshine阅读 3,379评论 0 1