Swift - 判断是否有某功能访问权限,没有则提示,并自动跳转到设置页

由于  iOS  系统的安全限制, App  如果需要访问设备的通讯录、麦克风、 相册、 相机、地理位置等时,需要请求用户是否允许访问。 
原文:Swift - 判断是否有某功能访问权限,没有则提示,并自动跳转到设置页

有时用户不小心点了“ 不允许”,后面可能就不知道要去哪里再开启这个权限了。这就要求我们应用在每次调用相关功能的时候先获取相关的授权状态,如果还没授权则弹出授权申请的提示框。如果之前被拒绝了,则弹出相关提示框让用户很方便地自动跳转到设置页面去修改权限。

1,样例效果图

(1)这里以照片的访问权限为例。为方便演示,我在页面初始化完毕后就请求权限。
(2)第一次请求的时候我们选择“ 不允许”。再次启动程序时,会提示用户照片访问受限,需要授权。
(3)点击“设置”按钮后便自动跳转到系统设置页面。
原文:Swift - 判断是否有某功能访问权限,没有则提示,并自动跳转到设置页 原文:Swift - 判断是否有某功能访问权限,没有则提示,并自动跳转到设置页

2,样例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import  UIKit
import  Photos
 
class  ViewController UIViewController  {
     
     override  func  viewDidLoad() {
         _ = authorize()
     }
     
     func  authorize()-> Bool {
         let  status =  PHPhotoLibrary .authorizationStatus()
         
         switch  status {
         case  .authorized:
             return  true
             
         case  .notDetermined:
             // 请求授权
             PHPhotoLibrary .requestAuthorization({ (status) ->  Void  in
                 DispatchQueue .main.async(execute: { () ->  Void  in
                     _ =  self .authorize()
                 })
             })
             
         default : ()
         DispatchQueue .main.async(execute: { () ->  Void  in
             let  alertController =  UIAlertController (title:  "照片访问受限" ,
                                                     message:  "点击“设置”,允许访问您的照片" ,
                                                     preferredStyle: .alert)
             
             let  cancelAction =  UIAlertAction (title: "取消" , style: .cancel, handler: nil )
             
             let  settingsAction =  UIAlertAction (title: "设置" , style: . default , handler: {
                 (action) ->  Void  in
                 let  url =  URL (string:  UIApplicationOpenSettingsURLString )
                 if  let  url = url,  UIApplication .shared.canOpenURL(url) {
                     if  #available(iOS 10, *) {
                         UIApplication .shared.open(url, options: [:],
                                                   completionHandler: {
                                                     (success)  in
                         })
                     else  {
                        UIApplication .shared.openURL(url)
                     }
                 }
             })
             
             alertController.addAction(cancelAction)
             alertController.addAction(settingsAction)
             
             self .present(alertController, animated:  true , completion:  nil )
         })
         }
         return  false
     }
  
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1517.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值