Notice
Recent Posts
Recent Comments
Link
투케이2K
85. (Objective-C/objc) CLLocationManager 사용해 위치 권한 요청 및 CLLocationManagerDelegate 딜리게이트 권한 부여 상태 확인 본문
Objective-C
85. (Objective-C/objc) CLLocationManager 사용해 위치 권한 요청 및 CLLocationManagerDelegate 딜리게이트 권한 부여 상태 확인
투케이2K 2022. 9. 22. 09:39[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : OBJECTIVE-C
[사전 info plist 권한 설정]
[ViewController.h]
// MARK: - [import 정의]
#import <UIKit/UIKit.h>
#import <SafariServices/SafariServices.h>
#import <WebKit/WebKit.h>
#import <AVFoundation/AVFoundation.h>
// MARK: - [위치 권한 import]
#import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController <CLLocationManagerDelegate> { // [클래스 딜리게이트 정의]
/*
-----------------------------
// [지역 변수 정의]
-----------------------------
1. self 키워드 없이 접근 가능
-----------------------------
2. 메소드 내에서 사용 필요
-----------------------------
3. 정보 은닉 데이터 처리
-----------------------------
*/
// [지역 변수 정의]
NSString *permissionState;
}
// [클래스 및 인스턴스 메소드 선언 (+ / static) (- / self)]
- (void)testMain;
// [get set 프로퍼티 선언]
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
[ViewController.m]
// MARK: - [뷰 컨트롤러 헤더 파일 import]
#import "ViewController.h"
// MARK: - [전처리 지시어 헤더 파일 import]
#import "S_Define.h"
// MARK: - [프로젝트-Swift.h import 명시]
#import "objectiveProject-Swift.h"
// MARK: - [클래스 @interface]
@interface ViewController(){
}
@end
// MARK: - [클래스 @implementation]
@implementation ViewController{
}
// MARK: - [클래스 @synthesize]
@synthesize locationManager;
// MARK: - [뷰 로드 실시]
- (void)viewDidLoad {
[super viewDidLoad];
printf("\n");
printf("==================================== \n");
printf("[ViewController >> viewDidLoad() :: 뷰 로드 실시] \n");
printf("==================================== \n");
printf("\n");
}
// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
printf("\n");
printf("==================================== \n");
printf("[ViewController >> viewWillAppear() :: 뷰 로드 완료] \n");
printf("==================================== \n");
printf("\n");
}
// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
printf("\n");
printf("==================================== \n");
printf("[ViewController >> viewDidAppear() :: 뷰 화면 표시] \n");
printf("==================================== \n");
printf("\n");
// [테스트 메인 함수 호출]
[self testMain];
}
// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
printf("\n");
printf("==================================== \n");
printf("[ViewController >> viewWillDisappear() :: 뷰 정지 상태] \n");
printf("==================================== \n");
printf("\n");
}
// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
printf("\n");
printf("==================================== \n");
printf("[ViewController >> viewDidDisappear() :: 뷰 종료 상태] \n");
printf("==================================== \n");
printf("\n");
}
// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
printf("\n");
printf("==================================== \n");
printf("[ViewController >> testMain() :: 테스트 메소드 수행] \n");
printf("==================================== \n");
printf("\n");
/*
------------------------------------
[요약 설명]
------------------------------------
1. CLLocationManager : 사용자 모바일에서 위치 권한을 확인 및 요청 할 때 사용합니다
------------------------------------
2. 필요 import :
#import <CoreLocation/CoreLocation.h>
------------------------------------
*/
// [try catch 구문 정의 실시]
@try {
// [CLLocationManager 인스턴스 할당 실시]
self.locationManager = [[CLLocationManager alloc] init];
// [딜리게이트 지정]
self.locationManager.delegate = self;
// [거리 정확도 설정]
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// [위치 권한 설정 값 확인]
[self.locationManager requestAlwaysAuthorization];
// [위치 업데이트 시작]
[self.locationManager startUpdatingLocation];
// [로그 출력 실시]
printf("\n");
printf("==================================== \n");
printf("[ViewController >> try :: 위치 권한 퍼미션 상태 확인 실시] \n");
printf("==================================== \n");
printf("\n");
}
@catch (NSException *exception) {
printf("\n");
printf("==================================== \n");
printf("[ViewController >> catch :: 예외 상황 확인] \n");
printf("[name :: %s] \n", exception.name.description.UTF8String);
printf("[reason :: %s] \n", exception.reason.description.UTF8String);
printf("==================================== \n");
printf("\n");
}
}
// MARK: - [앱 상태 바 콘텐츠 색상 커스텀 변경 실시]
-(UIStatusBarStyle)preferredStatusBarStyle {
// return UIStatusBarStyleLightContent; // [상태바 콘텐츠 색상 흰색으로 변경 : ex (배터리 표시)]
if (@available(iOS 13.0, *)) { // [상태바 콘텐츠 색상 검정색으로 변경 : ex (배터리 표시)]
return UIStatusBarStyleDarkContent;
} else {
return UIStatusBarStyleDefault;
}
}
// MARK: - [위치 권한 부여 상태 확인 딜리게이트]
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorizedAlways){
printf("\n");
printf("==================================== \n");
printf("[ViewController >> locationManager :: 위치 권한 부여 상태 확인] \n");
printf("[status :: kCLAuthorizationStatusAuthorizedAlways] \n");
printf("[message :: 위치 사용 권한 항상 허용] \n");
printf("==================================== \n");
printf("\n");
}
else if (status == kCLAuthorizationStatusAuthorizedWhenInUse){
printf("\n");
printf("==================================== \n");
printf("[ViewController >> locationManager :: 위치 권한 부여 상태 확인] \n");
printf("[status :: kCLAuthorizationStatusAuthorizedWhenInUse] \n");
printf("[message :: 위치 사용 권한 앱 사용 시 허용] \n");
printf("==================================== \n");
printf("\n");
}
else if (status == kCLAuthorizationStatusDenied){
printf("\n");
printf("==================================== \n");
printf("[ViewController >> locationManager :: 위치 권한 부여 상태 확인] \n");
printf("[status :: kCLAuthorizationStatusDenied] \n");
printf("[message :: 위치 사용 권한 거부] \n");
printf("==================================== \n");
printf("\n");
}
else if (status == kCLAuthorizationStatusRestricted){
printf("\n");
printf("==================================== \n");
printf("[ViewController >> locationManager :: 위치 권한 부여 상태 확인] \n");
printf("[status :: kCLAuthorizationStatusRestricted] \n");
printf("[message :: 위치 사용 권한 제한 상태] \n");
printf("==================================== \n");
printf("\n");
}
else if (status == kCLAuthorizationStatusNotDetermined){
printf("\n");
printf("==================================== \n");
printf("[ViewController >> locationManager :: 위치 권한 부여 상태 확인] \n");
printf("[status :: kCLAuthorizationStatusNotDetermined] \n");
printf("[message :: 위치 사용 권한 대기 상태] \n");
printf("==================================== \n");
printf("\n");
}
else {
printf("\n");
printf("==================================== \n");
printf("[ViewController >> locationManager :: 위치 권한 부여 상태 확인] \n");
printf("[status :: else] \n");
printf("==================================== \n");
printf("\n");
}
}
// --------------------------------------
@end
// --------------------------------------
[결과 출력]
반응형
'Objective-C' 카테고리의 다른 글
Comments