iOS开发各种权限问题(相机、录音等)

8 篇文章 0 订阅

起因


在iOS开发中我们经常会调用系统相机和麦克风,但是这些权限都是用户可以控制的,当APP没有权限调用这些手机资源,但是我们没有判断,直接去调用了,这样会出现问题。

麦克风权限


我在项目中开发IM的录音功能的时候,没有判断当前APP是否拥有响应的权限,导致录制失败(录制出来是0kb,长度也是0毫秒)。为此我在工具类中,添加了麦克风权限的判断方法,当用户去录音的时候,如果检测到没有响应的麦克风权限,则提示用户到手机的设置页面打开麦克风的权限,当用权限的时候直接录制就可以了。

- (BOOL)canRecord
{
    __block BOOL bCanRecord = YES;
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending)
    {
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
            [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
                bCanRecord = granted;
            }];
        }
    }
    return bCanRecord;
}

相机权限


同样在开发IM的小视屏(和微信小视屏一样)功能的时候也遇到了同样的问题,在没有判断相机权限的前提下,我手动关掉了APP的相机访问权限,则我录制视频的时候的预览页黑乎乎一片,什么也没有,同样没办法录制,这给用户的体验非常差,所以当我们调用系统资源的时候,一定要先判断是否拥有相应的权限。以下是我的判断相机权限的代码:

- (BOOL)canRecordViedo
{
    NSString *mediaType = AVMediaTypeVideo;
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
    if (authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
        return NO;
    } else {
        return YES;
    }
}

相册权限


其实该权限不去判断也可以,因为当你没有相册权限而去调用本机相册的时候,系统默认会pop出一个提示的页面,提示用户,没有相册权限,去手机的设置页面设置该权限。系统的这个页面还是可以的(不丑),所以我就用了系统的提示页面了。但是我还是在工具类中实现了相册权限的判断,方便以后归类。

- (BOOL)albumAuthority
{
    ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
    if (author == kCLAuthorizationStatusRestricted || author ==kCLAuthorizationStatusDenied){
        return NO;
    } else {
        return YES;
    }
}

定位权限


当用户用到定位的功能的时候,也涉及到权限的问题,我顺便也实现了该功能权限的判断:

- (BOOL)locationAuthority
{
    CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
    if (kCLAuthorizationStatusDenied == status || kCLAuthorizationStatusRestricted == status) {
        return NO;
    } else {
        return YES;
    }
}


总结


当我们调用系统资源的时候,一定要先判断是否拥有相应的权限,做到代码的严谨性。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,iOS开发中需要使用Wi-Fi的功能需要在应用程序中获取Wi-Fi的权限。获取Wi-Fi权限的步骤如下: 1. 在应用程序的Info.plist文件中添加以下代码,允许应用程序访问Wi-Fi信息: ```xml <key>NSWi-FiUsageDescription</key> <string>需要使用您的Wi-Fi信息来进行某些操作</string> ``` 在字符串中,您可以描述应用程序为什么需要访问Wi-Fi信息。这个描述将显示在系统弹出的权限请求对话框中,让用户知道应用程序为什么需要Wi-Fi权限。 2. 在应用程序中使用系统提供的WiFiManager类来访问Wi-Fi信息。例如,以下代码将检查当前设备是否连接到Wi-Fi网络: ```swift import SystemConfiguration.CaptiveNetwork func getWiFiInfo() -> [AnyHashable: Any]? { var wifiInfo: [AnyHashable: Any]? if let interfaces = CNCopySupportedInterfaces() as NSArray? { for interface in interfaces { if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? { wifiInfo = interfaceInfo as? [AnyHashable: Any] break } } } return wifiInfo } let wifiInfo = getWiFiInfo() if let ssid = wifiInfo?["SSID"] as? String { print("当前连接的Wi-Fi名称为:\(ssid)") } else { print("当前未连接到Wi-Fi网络") } ``` 这段代码使用了SystemConfiguration框架中的CaptiveNetwork类来获取当前设备连接的Wi-Fi网络信息。注意,在使用CaptiveNetwork类时,需要导入SystemConfiguration框架。 希望这些步骤能够对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值