iOS-蓝牙拍照

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-蓝牙拍照相关的知识,希望对你有一定的参考价值。

参考技术A

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

1.导入头文件

2.监听音量变化

3.通知

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

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

2.导入头文件

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

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

iOS拍照之系统拍照

拍照在App中使用频次高,入门级别直接调用系统拍照


  • 思路:

    系统拍照使用UIImagePickerController

    1.设置下plist,否则没权限,报错

    2.判断摄像头,获取权限,否则弹出界面黑着

    3.设置代理,实现代理

    4.代理方法中获取拍照的图片/视频

  • 上菜

    • plist中添加Privacy - Camera Usage Description,文案根据App需要来
    • 权限
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
    
    }
    • 设置UIImagePickerController
    UIImagePickerController *vc = [[UIImagePickerController alloc] init];
    // 设置该属性的时候,出现拍照与拍视频选项
    vc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    vc.sourceType = UIImagePickerControllerSourceTypeCamera;
    vc.delegate = self;
    vc.allowsEditing = NO;
    // 设置摄像头[后置摄像头]
    vc.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    // 设置闪光模式
    vc.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
    // 设置摄像头模式
    vc.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo; // 当该模式设置为video的时候,meidaTypes设置出现拍照与拍视频选项时,先展示video视频拍摄选项
    // 录制的最大时间
    vc.videoMaximumDuration = 10;
    // 视频质量
    vc.videoQuality = UIImagePickerControllerQualityTypeHigh;
    vc.modalPresentationStyle = UIModalPresentationFullScreen;
    [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:vc
                                                                                     animated:YES
                                                                                   completion:nil];
    • 代理实现
    #pragma mark - UINavigationControllerDelegate, UIImagePickerControllerDelegate
    - (void)imagePickerController:(UIImagePickerController *)picker
    didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
        // 获取选中资源类型
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { // 拍照结果
            UIImage *image = nil;
            if (picker.allowsEditing) {
                image = [info objectForKey:UIImagePickerControllerEditedImage];
            } else {
                image = [info objectForKey:UIImagePickerControllerOriginalImage];
            }
            [picker dismissViewControllerAnimated:YES completion:nil];
        } else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) { // 视频结果
            NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
            // 视频存放到系统相册
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                if (status == PHAuthorizationStatusAuthorized) {
                    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                               [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
                           } completionHandler:^(BOOL success, NSError * error) {
                               if (success) {
                                   NSLog(@"保存视频到相册");
                               } else {
                                   NSLog(@"保存视频到相册失败:%@", error);
                               }
                           }];
                } else {
                    NSLog(@"无访问相册权限");
                }
                dispatch_async(dispatch_get_main_queue(), ^{
                    [picker dismissViewControllerAnimated:YES completion:nil];
                });
            }];
        }
    }
    
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
        [picker dismissViewControllerAnimated:YES completion:nil];
    }
  • 结语:

    UIImagePickerController使用方便,可拍照、视频。适用于拍照界面无定制、简单取图这类需求

以上是关于iOS-蓝牙拍照的主要内容,如果未能解决你的问题,请参考以下文章

如何重置你的mac mini解决蓝牙键盘

iOS 蓝牙

iOS中的蓝牙 CoreBluetooth蓝牙系列

ios设备app作为蓝牙外设端

ios:和蓝牙过过招

iOS蓝牙开发:蓝牙连接和数据读写