美文网首页
iOS-蓝牙拍照

iOS-蓝牙拍照

作者: 李丘 | 来源:发表于2019-05-22 14:46 被阅读0次

需求:使用蓝牙快门遥控器控制拍照 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-蓝牙拍照

    需求:使用蓝牙快门遥控器控制拍照 APP 进行拍照。 解决思路 苹果手机系统相机可以通过按音量键进行拍照,目前市面...

  • iOS-蓝牙(CoreBlueTooth)

    iOS蓝牙须知 iOS提供了4个框架用于实现蓝牙连接 1.gameKit.framework(用法简单) 只能用于...

  • iOS-蓝牙(GameKit)

    GameKit框架简介 1.使用GameKit框架,可以在游戏中增加对等链接,又称对端链接或点对点链接,Peer ...

  • iOS-蓝牙开发

    iOS个版本蓝牙比较 随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步...

  • iOS-蓝牙4.0使用

    借鉴与刘彦玮的技术博客,谢谢,文章如下:iOS蓝牙开发(一)蓝牙相关基础知识ios连接外设的代码实现BabyBlu...

  • iOS-蓝牙开发Mark

    iOS蓝牙的开发专题[http://liuyanwei.jumppo.com/2015/07/17/ios-BLE...

  • iOS-相机拍照崩溃

    最近在使用系统拍照,只要一点击拍照就崩溃,不稳定复现,最终抓到Log如下:[UIKeyboardTaskQueue...

  • iOS-私有API与runtime

    iOS-私有API与runtime iOS-私有API与runtime

  • iOS-代码混淆加固策略

    iOS-代码混淆加固策略 iOS-代码混淆加固策略

  • iOS-性能优化深入探究

    iOS-性能优化深入探究 iOS-性能优化深入探究

网友评论

      本文标题:iOS-蓝牙拍照

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