瘋狂
問題描述
- 在iOS 10下 ,首次進(jìn)入應(yīng)用時耕赘,會有詢問是否允許網(wǎng)絡(luò)連接權(quán)限的的彈窗骄蝇,為更好進(jìn)行用戶交互,需要在打開應(yīng)用時獲取應(yīng)用禁用網(wǎng)絡(luò)權(quán)限狀態(tài)(狀態(tài)分為:未知操骡、限制網(wǎng)絡(luò)九火、未限制網(wǎng)絡(luò)),客戶端根據(jù)不同的權(quán)限狀態(tài)定制相應(yīng)的人機(jī)交互册招。
問題調(diào)研
- 針對請求應(yīng)用網(wǎng)絡(luò)權(quán)限可能存在的幾種情形岔激,操作與對應(yīng)的狀態(tài)都是筆者測試得到的,具體如下所示:
可能操作 | 關(guān)閉| 無線局域網(wǎng)|無線局域網(wǎng)&蜂窩|不進(jìn)行操作|鎖屏|解鎖|按Home鍵
------------ | ------------- | ------------
權(quán)限狀態(tài) | Restricted | NotRestricted | NotRestricted | Unknown|Unknown|恢復(fù)原始狀態(tài)|保持原有狀態(tài)
解決問題
- 使用
CoreTelephony.framework
框架下的CTCellularData
類中的方法和屬性進(jìn)行解決,具體如下: - 當(dāng)聯(lián)網(wǎng)權(quán)限的狀態(tài)發(fā)生改變時跨细,會在上述方法中捕捉到改變后的狀態(tài),可根據(jù)更新后的狀態(tài)執(zhí)行相應(yīng)的操作河质。
CTCellularData *cellularData = [[CTCellularData alloc]init];
cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){
//狀態(tài)改變時進(jìn)行相關(guān)操作
};
- 當(dāng)查詢應(yīng)用聯(lián)網(wǎng)權(quán)限時可以使用下面的方法:
CTCellularData *cellularData = [[CTCellularData alloc]init];
CTCellularDataRestrictedState state = cellularData.restrictedState;
switch (state) {
case kCTCellularDataRestricted:
NSLog(@"Restricrted");
break;
case kCTCellularDataNotRestricted:
NSLog(@"Not Restricted");
break;
case kCTCellularDataRestrictedStateUnknown:
NSLog(@"Unknown");
break;
default:
break;
}
補(bǔ)充一下
CoreTelephony.framework
iOS7之前還是私有框架冀惭,框架內(nèi)部提供還是私有API,但在iOS7之后該框架就成為公開的框架,大家可以盡情的使用了掀鹅。寫這篇博客一方面是為了彌補(bǔ)前些日子寫的博客iOS開發(fā)中的這些權(quán)限散休,你搞懂了嗎?中的不足之處乐尊,另一方面是為了解決部分讀者的疑惑戚丸,希望讀者大人們多多支持!