博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS:检测多媒体(相机、相册、麦克风)设备权限,弹框提示
阅读量:4986 次
发布时间:2019-06-12

本文共 3079 字,大约阅读时间需要 10 分钟。

一、感言

新年伊始,万象更新,一转眼,就2019年了。

作为一个科班生,从事移动端开发好几年了,回顾曾经的摸爬滚打,兢兢业业,严格的来说,多少算是入行了。

过去成绩如何暂且不说,新的一年,我当加倍努力,凤凰涅槃,浴火重生。

 

二、介绍

在项目中,多媒体的使用非常常见,那么,询问设备的权限必不可少。

优点:这么做极大的增强了用户体验,友好地告知用户去开启权限。

例如:相机的使用权限、相册的使用权限、麦克风的使用权限等

 

三、代码

1、相机的使用权限 (导入 #import <AVFoundation/AVFoundation.h>

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){     [self showAlertMessage:@"该设备不支持相机功能"];     return;}AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){     [self showAlertMessage:@"应用相机权限受限,请在设置中启用"];     return; }UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.sourceType = UIImagePickerControllerSourceTypeCamera;picker.delegate = self;[self presentViewController:picker animated:YES completion:nil];

2、相册的使用权限(导入  #import<Photos/PHPhotoLibrary.h>

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {     [self showAlertMessage:@"该设备不支持相册功能~"];     return;}PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied){    [self showAlertMessage:@"应用相册权限受限,请在设置中启用"];    return;}    UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;picker.delegate = self;[self presentViewController:picker animated:YES completion:nil];

3、麦克风的使用权限(导入 #import <AVFoundation/AVFoundation.h>)

AVAuthorizationStatus audioAuthStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];    if (audioAuthStatus == AVAuthorizationStatusNotDetermined) {  //未询问用户是否授权    //第一次询问用户是否进行授权,只会调用一次    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {       if (!granted) {          dispatch_async(dispatch_get_main_queue(), ^{ //手动禁止了授权             [self showAlertMessage:@"您已禁用了麦克风,请到设置中开启后重试~"];          });        }    }]; } else if (audioAuthStatus == AVAuthorizationStatusAuthorized) { //麦克风已开启     [[RecordUtility shareRecordUtility] startRecord]; //开始录音 } else{ //未授权     [self showAlertMessage:@"您未开启麦克风权限,请到设置中开启后重试~"]; }

 注意:跳转到设置中开启权限(CCBlcokAlertView是继承自UIAlertView的alertView,自己自定义一下吧,简单)

-(void)showAlertMessage:(NSString *)message{    CCBlockAlertView *alertView = [[CCBlockAlertView alloc] initWithTitle:@"提示" message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];    alertView.delegate = alertView;    alertView.blockAlertViewDidDismissWithButtonIndex = ^(CCBlockAlertView *blockAlertView, int buttonIndex) {        if (buttonIndex == 1) { // 点击了去设置,跳转设置            NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];            if ([[UIApplication sharedApplication] canOpenURL:url]) {                [[UIApplication sharedApplication] openURL:url];            }        }    };    [alertView show];}

 

转载于:https://www.cnblogs.com/XYQ-208910/p/10209889.html

你可能感兴趣的文章
控制台修改Mysql 密码
查看>>
C 【block类型全方位详解】
查看>>
蚂蚁拼图
查看>>
java是传值还是传引用
查看>>
angularJS快速入门
查看>>
markdown基本语法
查看>>
【译】为什么估算很难?!从旧金山到洛杉矶的旅行
查看>>
半年没玩机会碰到驱动了,最近才有机会研究了下所谓防黑墙demo
查看>>
我记录开源系统1.6源码解析(一)
查看>>
256. Paint House房屋染色
查看>>
671. Second Minimum Node In a Binary Tree 非递减二叉树中第二小的元素
查看>>
747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
查看>>
105. Construct Binary Tree from Preorder and Inorder Traversal根据前中序数组恢复出原来的树...
查看>>
MS-SQL Server [摘改]
查看>>
实验五 6 6
查看>>
进阶攻略|前端最全的框架总结
查看>>
网站二次开发的总结
查看>>
把手账打印成书 把回忆装订成册
查看>>
洛谷P4116 Qtree3
查看>>
洛谷 P1195 口袋的天空
查看>>