只要 App 會用到 GPS 的功能就會跳出一個視窗詢問使用者是否同意該 App 使用 GPS 的功能,如下圖。
那我在程式內要如何判斷使用者是點選"同意"還是"不同意"呢?換句話說就是要判斷該 App 揪~~竟~~能否使用 GPS 功能!
其實不難,但是要先了解 GPS 是否開啟其實有分兩個開關。 一是 GPS 總開關(Location Services),二是各別 App 是否開啟 GPS 功能(例如 Big Lens 就被我關掉,Camera則可以使用)。
要判斷總開關是否開啟很簡單,也最常使用,如下
[CLLocationManager locationServicesEnabled]
[CLLocationManager locationServicesEnabled] 會回傳一個 BOOL 值,YES就是開啟,NO就是關閉,沒啥好講的。
再來是要判斷各個 App 的 GPS 使用權,也正是此次遇到的問題。
其實 Apple 的官方文件裡也有寫,只是不知道為啥似乎很少人使用,Google 了一陣子才找到正解。官方文件
判斷各個 App 的 GPS Method 是
[CLLocationManager authorizationStatus] 回的就不是 BOOL了,而是整數。定義如下
簡單說明一下各個代表的意義,官方文件都有詳細說明,有興趣的人請自行前往囉。
kCLAuthorizationStatusNotDetermined 表示使用者尚未選擇同意或不同意。
kCLAuthorizationStatusRestricted 代表GPS功能受限於某些限制,例如 parental controls(不懂這應該翻叫啥。。。)
kCLAuthorizationStatusDenied 代表使用者點選了不同意!
kCLAuthorizationStatusAuthorized 代表使用者點選同意 。
所以只要在我需要的地方打上
就可判斷使用者有打開該 App 的 GPS 功能了,這麼簡單的東西也可以打這麼一大篇。。。
其實 Apple 的官方文件裡也有寫,只是不知道為啥似乎很少人使用,Google 了一陣子才找到正解。官方文件
判斷各個 App 的 GPS Method 是
[CLLocationManager authorizationStatus]
[CLLocationManager authorizationStatus] 回的就不是 BOOL了,而是整數。定義如下
typedef enum { kCLAuthorizationStatusNotDetermined = 0, kCLAuthorizationStatusRestricted, kCLAuthorizationStatusDenied, kCLAuthorizationStatusAuthorized } CLAuthorizationStatus;
簡單說明一下各個代表的意義,官方文件都有詳細說明,有興趣的人請自行前往囉。
kCLAuthorizationStatusNotDetermined 表示使用者尚未選擇同意或不同意。
kCLAuthorizationStatusRestricted 代表GPS功能受限於某些限制,例如 parental controls(不懂這應該翻叫啥。。。)
kCLAuthorizationStatusDenied 代表使用者點選了不同意!
kCLAuthorizationStatusAuthorized 代表使用者點選同意 。
所以只要在我需要的地方打上
if ( [CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorized) { //you can not use GPS. //do something }
就可判斷使用者有打開該 App 的 GPS 功能了,這麼簡單的東西也可以打這麼一大篇。。。
沒有留言:
張貼留言