IOS——通訊錄操作(適用於IOS6)
馬上就要開始新的專案了,由於原型和UI還沒有到位,趁著空閒的時間很多,就提前做了一些驗證性的工作,做完就立馬來mark一下,這次說的通訊錄
在IOS5之前,訪問通訊錄只需要加入簡單的程式碼就可以進行操作,程式碼如下:
ABAddressBookRef addressBook = ABAddressBookCreate();
不過,在IOS6上面已經不是這樣子了,由於之前的IOS版本在隱私方面被人詬病,現在每個APP要訪問通訊錄都需要得到使用者的授權。(當然,漢化的比較坑爹,居然提示說要訪問日曆,而不是通訊錄,可能外國人認為中國人的日曆就是通訊錄吧)
程式碼如下:
ABAddressBookRef addressBook = nil;
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0)
{
addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
//等待同意後向下執行
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error)
{
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
}
else
{
addressBook = ABAddressBookCreate();
}
呼叫上面的程式碼,就可以適配IOS6和IOS5了,不過,這隻會在第一次請求授權的時才會顯示對話方塊,如果使用者已經拒絕,那麼只好我們自己判斷授權狀態了。程式碼:
NSLog(@"%ld",ABAddressBookGetAuthorizationStatus());
這樣就可以知道授權狀態了,另外附上官方的解釋:
// To check the app's access to contact data. Based upon the access, the app could
// display or hide its UI elements that would access any AddressBook API.
//
// kABAuthorizationStatusNotDetermined
// The user has not yet made a choice regarding whether this app can access the data class.
//
// kABAuthorizationStatusRestricted
// This application is not authorized to access the data class. The user cannot change
// this application’s status, possibly due to active restrictions such as parental controls
// being in place.
//
// kABAuthorizationStatusDenied
// The user explicitly denied access to the data class for this application.
//
// kABAuthorizationStatusAuthorized
// This application is authorized to access the data class.
//
typedef CF_ENUM(CFIndex, ABAuthorizationStatus) {
kABAuthorizationStatusNotDetermined = 0,
kABAuthorizationStatusRestricted,
kABAuthorizationStatusDenied,
kABAuthorizationStatusAuthorized
};
AB_EXTERN ABAuthorizationStatus ABAddressBookGetAuthorizationStatus(void) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0);
知道了授權狀態,我們就可以提醒使用者去設定裡面改變授權授權狀態了。
程式安裝之後,只有第一次會提示是否訪問通訊錄,第二次就不會了,即使刪除了程式,也是不會重現的,非常不方便大家除錯,其實,裝置還原之後,它還是會出現的。
還原步驟:設定-通用-還原-還原位置與隱私
相關文章
- 訪問通訊錄 適配iOS7iOS
- 隱形通訊錄:全新iOS通訊錄應用概念設計iOS
- iOS - Contacts 通訊錄iOS
- Andromeda:適用於多程式架構的元件通訊框架架構元件框架
- IOS開發筆記 IOS如何訪問通訊錄iOS筆記
- 適用於iOS的AnyTransiOS
- iOS獲取通訊錄聯絡人資訊iOS
- 舊工程適配iOS6和iPhone5的一些故事iOSiPhone
- [譯] 介紹適用於 iOS 的 AloeStackViewiOSView
- Window 95串列埠通訊函式集合(只適用於32位) (轉)串列埠函式
- 適用於iOS的應用程式程式設計指南(七)iOS程式設計
- iOS6下實現滑動返回iOS
- iOS攻防:如何竊取使用者的通訊錄資訊iOS
- 如何獲取漢字拼音首字母?一般用於通訊錄
- 用ContentProvider查詢通訊錄和運用事務在ContentProvider操作上IDE
- 通訊錄AdressDAO
- 基於單連結串列的班級通訊錄
- iOS基於Socket.io即時通訊IM實現,WebRTC實現視訊通話iOSWeb
- Bitdefender:調查顯示19%的iOS應用未經允許訪問了通訊錄iOS
- iOS:即時通訊之iOS
- 移動端通訊錄
- 通訊錄管理系統
- 【Java專案(2)】基於Javaee的通訊錄系統Java
- 直接用通訊錄Excel群發電子郵件Excel
- ios實現本地通訊錄點選(標識)跳轉APPiOSAPP
- 樂訊通雲通訊:物聯網路卡廣泛應用於哪些行業?行業
- 【Cocos2d-X】iOS6 中 libcurl.a及iOS6中無法橫屏的解決方法薦iOS
- Spark適用於哪些場景?不適用於哪些場景?Spark
- 樂訊通雲通訊:物聯網路卡適合哪些行業使用?行業
- 關於iOS多執行緒通訊的相關總結iOS執行緒
- iOS流式即時通訊教程iOS
- iOS app之間通訊方式iOSAPP
- 直接用通訊錄Excel群發電子郵件(轉)Excel
- C#通訊錄設計C#
- BusyContacts for Mac通訊錄管理Mac
- 利用SQL實現通訊錄SQL
- 通訊錄觸控下拉demo
- 訪問手機通訊錄