Hình 1 Kết quả cần đạt được khi thu GPS của iPhone
Đầu tiên ta phải tạo một Project mới. Trong Xcode, File-> New Project. Hộp thoại
hiển thị ra ta cần lưu ý chọn Application
của iPhone OS. Chọn tạo kiểu ứng dụng là View-based Application và lưu lại
với tên CoreLocationDemo hoặc một tên bất kỳ bạn muốn.
Hình 2 Tạo Project “CoreLocationDemo” kiểu
View-based Application
Sau khi tạo xong Project ta Add framework
“CoreLocation.framework” vào trong dự án của chúng ta. Bằng cách tích vào dấu
“+” trong Build Phases để Add framework này vào.
Hình 3 Tích vào dấu “+” trong Build Phases để Add
framework
Ø
Sau khi bấm vào dấu “+” thì hộp thoại chọn Add framework
hiển thị ra ta hãy tìm chọn đến “CoreLocation.framework”
Hình 4 Chọn Add “CoreLocation.framework”
Tiếp theo ta cần tạo một lớp để quản lý truy cập
“CoreLocation”. Lớp này sẽ nhận thông điệp từ framework “CoreLocation” là chứa dữ liệu thô và sau đó
sẽ chuyển thông tin này đến lớp ViewController(điều khiển hiển thị).
Ø
Tạo một file mới (File-> New File) và tạo ra
một lớp Objective-C mới (iPhone OS-> Cocoa Touch Class-> Objective-C) và nhớ
chọn subclass là “NSObject”. Đặt tên
file này là “CoreLocationController” và chọn Add vào Project “CoreLocationDemo”
của ta.
Hình 5 Tạo file mới “CoreLocationController”
Sau khi tạo file mới xong ta viết mã lệnh vào file này.
Ø
Trong file CoreLocationController.h thêm mã lệnh
sau vào:
#import <CoreLocation/CoreLocation.h> //Chèn thư viện
CoreLocation
Ø
Khai báo giao thức để cho các lớp khác có thể
truy cập vào lấy thông tin lớp này thông qua giao thức ta tạo ra. Vẫn ở trong
lớp CoreLocationController.h thêm lệnh sau:
@protocol CoreLocationControllerDelegate
@required
- (void)locationUpdate:(CLLocation
*)location;
- (void)locationError:(NSError *)error;
@end
Ø
Bây giờ chúng ta cần tạo cho lớp vừa mới thêm
vào tuân thủ theo giao thức “CLLocationManagerDelegate”. Trong file
CoreLocationController.h:
@interface
CoreLocationController : NSObject <CLLocationManager Delegate> {
CLLocationManager
*locMgr;
id
delegate;
}
@property (nonatomic, retain)
CLLocationManager *locMgr;
@property (nonatomic, assign) id
delegate;
@end
Ø
Sau khi khai báo lớp xong ở file “.h” ta chuyển
sang phần nội dung của lớp ở file. Trong file CoreLocationController.m:
@synthesize locMgr, delegate; //Khởi tạo
2 biến đã được khai báo từ trước
Ø
Bây giờ ta cần bắt đầu với phương thức “init”để
được quyền truy cập vào giao thức CLLocationManager.(Bạn có thể tìm hiểu thêm ý
phương thức “init” trong Objective-C). Trong file CoreLocationController.m:
- (id)init {
self = [super init];
if(self
!= nil) {
self.locMgr
= [[[CLLocationManager alloc] init] autorelease];
self.locMgr.delegate
= self;
}
return
self;
}
Ø
Tiếp theo là hai phương thức gọi lại từ giao
thức CLLocationManagerDelegate. Chúng sẽ cập nhật dữ liệu tọa độ GPS, tốc
độ…của “CoreLocation”, cũng như xử lý các thông báo lỗi. Cuối cùng, chúng ta cần
xóa bỏ locMgr khi không cần dùng đến nữa. Trong file CoreLocationController.m:
-
(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
if([self.delegate
conformsToProtocol:@protocol
(CoreLocationControllerDelegate)]) {
[self.delegate
locationUpdate:newLocation];
}
}
-
(void)locationManager:(CLLocationManager *)manager didFailWithError: (NSError
*)error {
if([self.delegate conformsToProtocol:@protocol
(CoreLocationControllerDelegate)])
{
[self.delegate
locationError:error];
}
}
- (void)dealloc {
[self.locMgr
release];
[super
dealloc];
}
Ta đã tạo ra lớp thu nhận tín hiệu GPS của iPhone, giờ
chúng ta cần lien kết file này tới các file View Controller để hiển thị thông
tin GPS thu nhận được, ta cần tuân thủ theo giao thức mà đã tạo ra ở lớp trên.
Mở file “CoreLocationDemoViewController.h” trong file này ta định nghĩa 4 IBOutlet
UILabel để hiện thị thông tin thu nhận GPS.
#import <UIKit/UIKit.h>
#import
"CoreLocationController.h"
@interface
CoreLocationDemoViewController : UIViewController
<CoreLocationControllerDelegate> {
CoreLocationController
*CLController;
IBOutlet
UILabel *speedLabel;
IBOutlet
UILabel *latitudeLabel;
IBOutlet
UILabel *longitudeLabel;
IBOutlet
UILabel *altitudeLabel;
}
@property (nonatomic, retain)
CoreLocationController *CLController;
@end
Chọn file CoreLocationDemoViewController.xib và kéo thả từ
Object Library 4 IBOutlets UILabel. Ta thiết kế như hình đầu Project giới
thiệu. Sau đó liên kết 4 Labe l
này với mã lệnh(làm tương tự như phần 4.3). Tiếp theo ta chọn file
“CoreLocationDemoViewController.m” viết code sau vào:
@synthesize CLController;
- (void)viewDidLoad {
[super viewDidLoad];
CLController
= [[CoreLocationController alloc] init];
CLController.delegate
= self;
[CLController.locMgr
startUpdatingLocation];
}
- (void)locationUpdate:(CLLocation
*)location {
speedLabel.text = [NSString
stringWithFormat:@"SPEED: %f", [location speed]];
latitudeLabel.text = [NSString
stringWithFormat:@"LATITUDE: %f", location.coordinate.latitude];
longitudeLabel.text = [NSString
stringWithFormat:@"LONGITUDE: %f", location.coordinate.longitude];
altitudeLabel.text = [NSString
stringWithFormat:@"ALTITUDE: %f", [location altitude]];
}
- (void)locationError:(NSError *)error {
speedLabel.text
= [error description];
}
- (void)dealloc {
[CLController
release];
[super dealloc];
}
Vậy là ta đã hoàn thành việc kết nói GPS iPhone và hiển thị các thông tin này lên giao diện của chương trình. Bạn có thể bấm Build and Go để chạy chương trình. (Các bạn lưu ý muốn có kết quả hiển thị thì ta phải sử dụng kết nối thiết bị iPhone).
Hãy like nếu bài viết có ích →
Kết bạn với gisgpsrs trên Facebook
để nhận bài viết mới nóng hổi