Tải bản đầy đủ (.docx) (29 trang)

Phát triển ứng dụng chia sẻ thông tin giao thông dựa trên thiết bị di động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (972.16 KB, 29 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA ĐIỆN TỬ - VIỄN THÔNG
&
BÁO CÁO
THỰC TẬP TỐT NGHIỆP
Phát triển ứng dụng chia sẻ thông tin giao thông
dựa trên thiết bị di động
Giáo viên hướng dẫn: Phạm Văn Tiến
Sinh viên thực hiện: Phạm Anh Tuấn
Mã số sinh viên: 20063510
Lớp: Điện tử 1 – K51
Hà Nội - 02/2010
1
BÁO CÁO
THỰC TẬP TỐT NGHIỆP
Phát triển ứng dụng chia sẻ thông tin giao thông dựa trên
thiết bị di động
Giáo viên hướng dẫn: Phạm Văn Tiến
Sinh viên thực hiện: Phạm Anh Tuấn
Mã số sinh viên: 20063510
Lớp: Điện tử 1 – K51
Khoa: Điện tử - Viễn thông
Hà Nội - 02/2010
2
MỤC LỤC
o0o
DANH MỤC HÌNH VẼ
3
1. MỞ ĐẦU:
Hiện nay nhu cầu sử dụng điện thoại trên thế giới ngày càng tăng nhanh. Những chiếc
smartphone hay feature phones không còn xa lạ với người sử dụng. Do vậy nhu cầu về


ứng dụng phục vụ công việc, giải trí cho dòng điện thoại này đã và đang trở thành một
điểm “nóng”. Định nghĩa feature phones dùng để mô tả những chiếc di động cấp thấp có
hiệu năng tính toán thấp hơn một smartphone. Đa số các feature phone phải chạy các
ứng dụng dựa trên nền một platform như JavaME hoặc BREW. Các feature phones có ít
API hỗ trợ cho lập trình ứng dụng, và bị giới hạn do bộ nhớ rất nhỏ (J2ME). Trong khi
đó Smartphone chạy trên một hệ điều hành hoàn thiện và cung cấp platform cho các nhà
phát triển ứng dụng thứ 3 để có thể phát triển ứng dụng của mình. Các ứng dụng chạy
trên smartphone (native application) do đó sẽ thân thiện hơn và đáp ứng được tối đa yêu
cầu từ người dùng.
H?nh 1 SmartPhone H?nh 2 Feature Phone
Nền tảng di động – mobile platform chính là “trái tim” của các thiết bị smartphone. Các
nền tảng smartphone đang phổ biến nhất hiện nay là Symbian gần đây với Symbian^3,
4
Window Mobile gần đây với Window Phone 7, và các nền tảng mở như iOS, Android,
PalmOS và SamSung bada vừa công bố.
Các nền tảng mở trên smartphone đang dần trở lên chiếm ưu thế và phổ biến hơn so với
các nền tảng khác do tính mở với số lượng người dùng ngày càng tăng và kho ứng
dụng phong phú.
H?nh 3 Share of worldwide 2010 Q4 smartphone sales to end users by operating system, according to Canalys
Trong quá trình thực tập tại phòng nghiên cứu truyền thông nhúng 411 – C9, thuộc bộ
môn Kỹ thuật thông tin, khoa Điện tử - Viễn thông, Đại học Bách Khoa Hà Nội, em
đã cùng nhóm nghiên cứu tìm hiểu các nền tảng mở trên smartphone và xây dựng ứng
dụng chia sẻ thông tin giao thông trên thiết bị SamSung WAVE GT-S8500 chạy hệ điều
hành bada. Trong báo cáo này em xin đi sâu vào platform bada và việc xây dựng ứng
dụng chia sẻ thông tin giao thông trên bada platform.
2. NỘI DUNG THỰC TẬP:
2.1. Bada platform
2.1.1. Định nghĩa
5
bada là một nền tảng phần mềm cho thiết bị di động do Samsung

Electronics phát triển. Bada được thiết kế để sử dụng trong các dòng điện
thoại thông minh cao cấp và trung cấp
2.1.2. Kiến trúc
bada có kiến trúc 4 lớp:
Kernel
bada, theo như định nghĩa của Samsung, không phải là một hệ điều hành,
nhưng là một nền tảng có nhân có thể cấu hình, cho phép sử dụng nhân
Linux hoặc các hệ điêu hành thời gian thực (RTOS).
Nhân Linux thường được dùng nhiều hơn cho các điện thoại thông minh
cao cấp, trong khi RTOS thường có trong các smartphone tầm trung do có
chân bộ nhớ nhỏ hơn
H?nh 4 bada architecture
Device
6
Lớp Device chứa chức năng chính (core functions) của platform Lớp cung
cấp những chức năng cơ bản như đồ họa, giao thức, gọi điện (telephony),
bảo mật, sự kiện (event) …
Service
Cung cấp các chức năng đặc trưng như SNS, bản đồ, thương mại. Để cung
cấp các chức năng này, Samsung xây dựng bada server để các ứng dụng
bada có thể sử dụng service components của server.
“This layer contains the service-oriented functions that are provided by application engines and
server-assisted components. The application engines provided by the service layer include
Contact and Messaging engines. The server-assisted features are provided by RESTful Web-
service components that inter-connect with the service components of the bada Server. This
enables applications to manage data that is stored on remote servers, such as geographic
information and user presence information. Access to the server-assisted features is possible
through APIs on the Framework layer. ”
Framework
Lớp Framework chứa “open API framework” của bada, cung cấp API viết

bằng C++ cho các nhà phát triển ứng dụng .
Lớp bao gồm application framework như các lớp và các giao diện cho
phép truy cập tới chức năng của lớp dưới.
“This layer contains the open API framework of bada. It consists of the application framework,
as well as interfaces and classes that provide access to the functionality on the underlying layers.
The application framework provides features for application life-cycle management, event
handling and application controls. The interfaces provided by the open API framework include
several basic interfaces that are needed by all applications for handling data types, utilities, basic
device features and application state and for creating the graphical user interface. The API
framework also contains interfaces related to UI, multimedia, communication,
internationalization, location, security, commerce and Web browsing, as well as interfaces that
provide access to the services provided by the underlying service layer.”
2.1.3. Bada application framework
2.1.3.1. Chu kỳ sống của ứng dụng
Hình dưới đây mô tả chu kỳ sống của 1 ứng dụng bada,bao gồm chuyển
đổi trạng thái của ứng dụng từ background sang foreground và ngược lại.
7
H?nh 5 Application Life-cycle
2.1.3.2. Sự chuyển đổi trạng thái của ứng dụng
Các ứng dụng bada có 4 trạng thái tương ứng sau:
Intializing
Application framework cài đặt ứng dụng và tạo frame ứng dụng.
Nếu phương thức OnAppInitializing() trả về giá trị flase 
Terminating 
Nếu phương thức OnAppInitializing()true 
 !"#$
%
Running
8
Terminating

Ứng dụng hủy các tài nguyên của riêng nó đã được cấp phát
Terminated
Appliction framework xóa ứng dụng khỏi bộ nhớ
H?nh 6 Application State Transition
2.1.3.3. Launching Applications
Ứng dụng bada có thể chạy từ menu chính hoặc qua ứng dụng đang chạy
H?nh 7 Launching Application
9
Khi chạy một ứng dụng từ menu chính, trình quản lý tiến trình nạp những
thư viện cần thiết và file nhị phân thực thi ứng dụng vào bộ nhớ . “entry
point” (OspMain) tạo ra một thể hiển của ứng dụng và thực thi nó. Trong
pha khởi tạo ứng dụng (OnAppInitializing()), tài nguyên, các
thành phần giao diện (UI component) sẽ được nạp vào bộ nhớ, thực thi các
tiến trình được yêu cầu.

2.1.4. Lập tr?nh bada cơ bản
2.1.4.1. Hai pha khởi tạo
Tránh hiện tượng rò rỉ tài nguyên nhớ (memory leak). Các ứng dụng bada
được phát triển bằng C++, trong C++ khi xảy ra lỗi cấp phát tài nguyên
trong hàm tạo của đối tượn, đối tượng được tạo không hoàn chỉnh
(partially constructed) và hàm hủy của đối tượng không được gọi đến.
H?nh 8 Code cause resource leak
Để tránh rò rỉ tài nguyên nhớ, sử dụng phương pháp 2 pha khởi tạo : đưa
quá trình cấp phát tài nguyên ra khỏi hàm tạo, đưa quá trình này vào 1
phương thức khác. Như ví dụ dưới đây quá trình cấp phát bộ nhớ cho 2
đối tương SimpleClass được đưa vào phương thức Construct():
10
H?nh 9 Hai pha khởi tạo
Các lớp trong bada application framework đều sử dụng 2 pha
khởi tạo nếu lớp đó có khả năng phát sinh ngoại lệ trong quá trình thực thi

hàm tạo của lớp đó.
Để tránh overhead do C++ exceptions, Samsung bada sử dụng
kiểu dữ liệu result để bắt lỗi và các ngoại lệ xảy ra trong quá trình thực
thi ứng dụng (Exception handing).
2.1.4.2. Object Ownership Policy
11
Ownership nhấn mạnh trách nhiệm xóa bỏ bộ nhớ cấp phát động và
tránh memory leak. Khi cấp phát vùng nhớ cho 1 đối tượng qua toán tử
new, vùng nhớ đấy phải được giải phóng khi no đã được dùng xong bằng
toán tử delete
There are 2 rules for obtaining ownership in bada:
• The new operator takes ownership of the allocated memory space.
• Ownership can be transferred, but it cannot be shared.
H?nh 10 Ownership giứa hai đối tượng
Trong bada những phương thức có tên kết thúc bằng chữ “N”, đối tượng
trả về của phương thức phải được delete sau khi dùng xong để tránh
memory leak.
12
2.1.4.3. Privileged API
Open API của bada được chia làm 3 mức privilege:
Non-privileged: mức chứa các API có thể được sử dụng mà không
cần khai báo privilege trong file manefist.xml
Normal: mức chưa các API mà muốn sử dụng cần khai báo
privilege cần thiết trong file manefist.xml
System: mức chứa các API chỉ được sử dụng bởi các developer với
vai trò là đối tác của SamSung
Trong quá trình phát triển ứng dụng, để sử dụng các API của bada có
privilege level Normal, cần khai báo privilege group được
yêu cầu trong file manefist.xml mặc định project được tạo hoặc lựa chọn
các privilege group cần thiết cho các API sẽ sử dụng khi đăng ký

ứng dựng trên bada developer site. Sau khi đăng ký ứng dụng trên bada
13
site thành công, tải file manefist được tạo về, và copy vào thư mục gốc
của project.
Ví dụ ứng dụng chia sẻ thông tin giao thông cần sử dụng API của lớp
Osp::Media::Camera &'$((CAMERA
)$(()%*$!+
<Privilege>
<Name>CAMERA</Name>
</Privilege>
,Privilege level-./#'./#
0(1(((2345($65($3(6'./#0(1((( 
7'#89:
2.1.5. Các tính năng bada
Không gian thư viện lập trình (namespace) của bada được phân chia theo
các tính năng : tính năng cơ bản, tính năng tương tác người dùng, tính năng
hướng dịch vụ (service-oriented). Điều này giúp việc phát triển ứng
dụng trở lên dễ dàng hơn, nhanh chóng tìm thấy các API và privilege group
cần thiết cho ứng dụng.
2.1.5.1. Tính năng cơ bản
Namespace cơ bản của bada
H?nh 11 Các namespace cơ bản
Đây là các namespace cơ bản cần thiết cho tất cả các ứng dụng bada
2.1.5.2. Tính năng tương tác người dùng
Các namespace để phát triển tính năng tương tác với người dùng :
14
H?nh 12 Các namespace thực hiện tính năng tương tác người dùng
Các tính năng tương tác ở đây là: dàn trải đồ họa lên màn hình,
handling media, Tạo UI controls, sử dụng UI extensions,
và quản lý web controls.

2.1.5.3. Tính năng hướng dịch vụ
Các namespace phục vụ các ứng dụng service-oriented
H?nh 13 Service-oriented namespaces
Tính năng service-oriented ở đây là mua bán qua Samsung App
Seller Office;<$=>2content management:;
$< location-aware;?messaging;
*@>%
2.2. Công cụ phát triển
Sử dụng bộ công cụ bada SDK được cung cấp trên bada develop site.
Bada SDK là bộ phát triển phần mềm bao gồm bada platform, tài liệu liên
quan và các ví dụ mẫu.
Các thành phần trong bada SDK:
Mã nhị phân của platform (Platform binaries), bộ thư viện phát triển ứng
dụng.
15
Các file header.
Tool-chain bao gồm trình biên dịch, trình debug, và trình mô phỏng.
Các ứng dụng ví dụ cho nhưng người làm quen vơi bada.
IDE - Môi trương phát triển tích hợp (Integrated Development
Environtent) dựa trên công cụ phát triển C/C++ nổi tiến Eclipse CDT.
2.3. Ứng dụng chia sẻ thông tin giao thông
2.3.1. Mô tả ứng dụng
Báo cáo này mô tả quá trình hoạt động , các thông số kĩ thuật, cấu trúc hệ
thống, phát triển phần mềm và việc triển khai hệ thống chia sẻ ảnh giao thông
thời gian thực trên điện thoại Bada. Hệ thống này với mục đích cung cấp cho
người dùng những thông tin cập nhật về tình hình giao thông trên các tuyến
đường hoặc 1 điểm cố định nào đó mà họ quan tâm. Điểm sáng tạo này chính
là ở chỗ những người đi đường có thể có được các thông tin giao thông hay
ảnh giao thông từ cơ sở dữ liệu được xây dựng từ những người đi đường khác
như họ chứ không chỉ là từ 1 trạm phát thanh nào đó (ví dụ như kênh VOV

giao thông). Nhờ có cơ sở dữ liệu trung tâm mà 1 số lượng lớn những người
16
sử dụng có thể gửi ảnh đến đó cùng lúc. Điều này giúp cho những người đi
đường có thể lấy được những thông tin giao thông mà họ quan tâm dễ dàng
hơn nhiều so với việc họ có được thông tin từ bản tin giao thông của 1 số trạm
phát thanh trung tâm.
H?nh 14 Tổng quan cấu trúc hệ thống
Nhờ có bản đồ số ở server mà người dùng có thể t?m kiếm ảnh giao thông
bằng cách click vào vị trí mà họ muốn xem thay v? phải nhập tên của vị
trí đó.
Cấu trúc của hệ thống được tr?nh bày trong h?nh 14. Trong hệ thống đó,
người dùng sử dụng điện thoại Bada, chụp h?nh giao thông và gửi nó đến
back-end server. Nhờ có máy thu GPS nhúng trong điện thoại di động
nên ảnh gửi đi sẽ được đính kèm thông tin về vị trí nơi mà nó được chụp.
Thêm vào đó, tốc độ di chuyển của người đi đường cũng sẽ được gửi kèm
với ảnh về server. Do đó, người xem có thể có them thông tin về các điểm
tắc nghẽn giao thông trên tuyến đường mà m?nh quan tâm. Tại server,
ảnh được lưu trữ và ghi chú theo vị trí mà nó được chụp. Server cũng có
17
thể cung cấp giao diện web cho những ai sử dụng điện thoại di động hoặc
lap top có thể truy cập và t?m kiếm ảnh giao thông.
H?nh 15 Thiết kế của cấu trúc hệ thống
2.3.2. Xây dựng các tính năng ứng dụng
2.3.2.1. Chụp ảnh và upload ảnh lên server
Sử dụng privilege group CAMERA và lớp Osp::Media::Camera để
xây dựng chức năng chụp ảnh cho ứng dụng.
Gọi phương thức result Osp::Media::Camera::Capture()A
%
result
CameraPreview::StartCapture(void)

{
Kiểm tra trạng thái hiện tại của camera có ở trạng thái
PREVIEW không (CAMERA_STATE_PREVIEW)
r = Capture();
if (IsFailed(r))
{
AppLog("Camera Capture failed ");
return r;
}
return r;
}
Xử lý ảnh chụp và upload ảnh lên server trong hàm callback:
18
void
CameraForm::OnCameraCaptured ( Osp::Base::ByteBuffer&
capturedData, result r )
{
Xử lý ảnh chụp
Upload ảnh lên server
Uploadimage
->Upload(imagePath,street,streetup,longitude,latitude,host);
}
Để xử lý ảnh chụp dùng lớp Image trong namespace Osp::Media. Đoạn
code sau nén ảnh nếu ảnh chụp quá lớn:
if(size > 500*1024)
{
int limitSize = 100*1024; //limit size is 20 kbytes
Image *_pImage = new Image();
r = _pImage->Construct();
if (IsFailed(r)) goto CATCH;

//Compress the Jpeg
r = _pImage->CompressJpeg (imagePath,
destPath,limitSize );
}
Upload ảnh lên server dùng giao thức HTTP phương thức POST.BC
$DE((Osp::Net::Http%
/$((&HTTPNET
void HttpUpload::Upload(Osp::Base::String
filePath,Osp::Base::String street,Osp::Base::String
streetup,Osp::Base::String longitude,Osp::Base::String
latitude,Osp::Base::String hostname)
{
Tạo phiên HTTP __pHttpSession
//Tạo phiên giao dịch Http Transaction trong phiên HTTP
pHttpTransaction = __pHttpSession->OpenTransactionN();
Lấy thể hiện cho quá trình request HTTP pHttpRequest
Chuẩn bị file upload
//Thiết lập phương thức POST cho HTTP
19
pHttpRequest->SetMethod(NET_HTTP_METHOD_POST);
// Upload file lên server
pHttpTransaction->Submit();
}
2.3.2.2. Chức năng bản đồ số cho ứng dụng
Privilege group yêu cầu LOCATION và LOCATION_SERVICE
2.3.2.2.1. Hiển thị bản đồ
Sử dụng các lớp ProviderManager((
Osp::Locations::ServicesAFGCH
(3
static IServiceProvider* ConnectToServiceProviderN(const

Osp::Base::String& name, LocationServiceProviderType type, const
Osp::Base::String& extraInfo);
LocationServiceProviderType$enumI
A!J'%
(*#1I&A!JCD!
"0K(((%
typedef enum {
/** %Service provider type for map services. */
LOC_SVC_PROVIDER_TYPE_MAP,
/** %Service provider type for route services. */
LOC_SVC_PROVIDER_TYPE_ROUTE,
/** %Service provider type for geocoding and reverse geocoding
services. */
LOC_SVC_PROVIDER_TYPE_GEOCODING,
/** %Service provider type for directory services. */
LOC_SVC_PROVIDER_TYPE_DIRECTORY
} LocationServiceProviderType;
,L(+
static const String PROVIDER_NAME(L"deCarta");
static const String PROVIDER_EXTRA_INFO(L"ClientName=BADA-
hut:;ClientPassword=xadei8us4E;HostUrl=art
ahws.com/openls/openls");
__pMapSvcProvider=static_cast<IMapServiceProvider*>(ProviderMana
ger::ConnectToServiceProviderN(PROVIDER_NAME,LOC_SVC_PROVIDER_TY
PE_MAP,PROVIDER_EXTRA_INFO));
20
__pGeocodingSvcProvider=static_cast<IGeocodingServiceProvider*>(
ProviderManager::ConnectToServiceProviderN(PROVIDER_NAME,LOC_SVC
_PROVIDER_TYPE_GEOCODING,PROVIDER_EXTRA_INFO_OSM));
M'ANC$DMap((

Osp::Locations::Controls
// Tạo bản đồ với __pMapSvcProvider
__pMap=new Map();
r= __pMap->Construct(Rectangle(0,82,clientRect.width,
clientRect.height-82),*__pMapSvcProvider);
2.3.2.2.2. Sử dụng dịch vụ chuyển từ tọa độ sang tên đương
phố (ReverseGeoCoding)
Yêu cầu sử dụng dịch vụ ReverseGeocoding
__pGeocodingSvcProvider=static_cast<IGeocodingServiceProvider*>(
ProviderManager::ConnectToServiceProviderN(PROVIDER_NAME,LOC_SVC
_PROVIDER_TYPE_GEOCODING,PROVIDER_EXTRA_INFO_OSM));
Gửi yêu cầu tới deCarta:
void
MapViewerForm::RequestReverseGeocode(const
Osp::Locations::Coordinates coordinates)
{
Cấu hình bản tin yêu cầu sẽ gửi tới server
// Gửi yêu cầu
__pGeocodingSvcProvider->ReverseGeocode(coordinates,
pPreferences, *this, reqId);
}
Kết quả trả về trong hàm callback:
void
MapViewerForm::OnReverseGeocodingRequestResultReceivedN
(RequestId requestId, const IGeocodingServiceProvider& provider,
Osp::Base::Collection::IList* pLandmarks, result r,
const Osp::Base::String& errorCode,
const Osp::Base::String& errorMsg)
{
Kiểm tra có kết quả trả vê hay không

// Lấy thông tin kết quả trả về
Landmark* pLandmark = static_cast<Landmark*>(
pLandmarks->GetAt(0));
21
const AddressInfo* pAddressInfo =
pLandmark->GetAddressInfo();
const QualifiedCoordinates* pCoords =
pLandmark->GetQualifiedCoordinates();
String streetNumber =
pAddressInfo->GetField(ADDRESS_FIELD_STREET_NUMBER);
String streetName =
pAddressInfo->GetField(ADDRESS_FIELD_STREET_NAME);
String city = pAddressInfo->GetField(ADDRESS_FIELD_CITY);
String state= pAddressInfo->GetField(ADDRESS_FIELD_STATE);
String postalCode=
pAddressInfo->GetField(ADDRESS_FIELD_POSTAL_CODE);
}
2.3.2.2.3. Lây dữ liệu từ GPS sensor
Sử dụng lớp LocationProvider()và giao diện
ILocationListenerA$I4A>HO/B(
Gửi yêu cầu lấy thông tin vị trí theo chu kỳ interval tính theo giây:
result RequestLocationUpdates(const ILocationListener&
listener, int interval, bool isSatelliteInfoIncluded);
PQR$E<$$'+
virtual void OnLocationUpdated(Location& location) = 0;
,L(+
__pLocationProvider=new LocationProvider();
r= __pLocationProvider->Construct(LOC_METHOD_HYBRID);
__pLocationProvider->RequestLocationUpdates(*this, 5, false);
void

NavigatorProc::OnLocationUpdated(Location& location){
if (location.GetQualifiedCoordinates() != null) {
const QualifiedCoordinates *q =
location.GetQualifiedCoordinates();
double latGPS=q->GetLatitude();
double lonGPS=q->GetLongitude();
}
}
S!D$TAG!JLocation;$DQualified
CoordinatesFH$DCoordinates$!!A>;
UA>;AIDA>7*%
22
Location
Location method
Qualified
Coordinate
s
Coordinate
s
Latitude
Longitud
e
Altitude*
Horizontal accuracy*
Vertical accuracy*
Timestamp
Course*
Speed*
Satellite information*
Error code

KDQualified CoordinatesV!W
double Osp::Locations::Coordinates::GetLatitude()
double Osp::Locations::Coordinates::GetLongitude()
A$A>UA>%
2.3.2.3. Chức năng tương tác với người dùng
Sử dụng các lớp và giao diện trong namespace Osp::Ui để xây dựng giao
diên và bắt các sự kiện từ phía người dùng ví dụ
Bắt sự kiện người dùng qua phương thức callback :
void OnActionPerformed(const Osp::Ui::Control& source, int
actionId);
của giao diện Osp::Ui::IActionEventListener
Sử dụng giao diện:
Osp::Locations::Controls::IMapEventListener
M*XL?!W!!YZD'AN%P!1
[LF'AN;*(II
'\>74G'AN%
23
3?!WA!J!E!W!$$'+
void MapViewerForm::OnMapClicked(const
Osp::Locations::Controls::Map& source,
constOsp::Graphics::Point& point, const
Osp::Locations::Coordinates& coordinates){
Thực thi chức năng cho việc tương tác với bản đồ
}
2.3.2.4. Quản lý File và tệp tin
Sử dụng namespace Osp::Io để thao tác với file và thư mục trên thiết bị.
Qua các lớp và giao diện trong namespace này xây dựng chức năng quản lý
ảnh thông tin giao thông mà người dùng download về hoặc lưu lại sau khi
chụp.
Để quản lý thư mục ảnh dùng lớp DirEnumerator, Directory,

DirEntry
result
QuanLyAnh::ChDir(const Osp::Base::String & base_dir)
{
Khai báo các biến
DirEnumerator* dircontent = NULL;
Tạo mảng lưu đường dẫn các file
if(baseDir_){delete baseDir_;}
baseDir_ = new Directory();
r = baseDir_->Construct(base_dir);
Kiểm giá trị r
basePath_ = base_dir;
dircontent=baseDir_->ReadN();
Kiểm tra lênh ReadN() thành công hay không
dircontent->MoveNext(); // Skip the same directory "."
while(dircontent->MoveNext() == E_SUCCESS)
{
DirEntry dirEntry = dircontent->GetCurrentDirEntry();
Lấy và lưu đương dẫn của file hiện tại vào contents_
Lấy dư liệu ảnh
Thêm ảnh vào danh sách cần hiển thị

}
}
this->Show();
delete dircontent;
return r;
}
2.3.2.5. Download ảnh
Để dowload ảnh sử dụng giao thức HTTP với phương pháp GET

Sử dụng các lớp và giao thức trong namespace Osp::Net::Http
24
Privilege group yêu cầu HTTP và NET
void
HttpDownload::SendRequest(Osp::Base::String
diadanh,Osp::Base::String danhlam,Osp::Base::String
longitude,Osp::Base::String latitude,Osp::Base::String
hostname,Osp::Base::String request)
{
Thiết lập bản tin gửi đi
HttpTransaction* pHttpTransaction = null;
// Create HTTP Session
__pHttpSession = new HttpSession();
__pHttpSession->Construct
(NET_HTTP_SESSION_MODE_NORMAL, pProxyAddr, hostAddr, null);
// Open a new Http Transaction within the HttpSession
pHttpTransaction = __pHttpSession->OpenTransactionN();
// Add Listener
//OnTransactionCompleted() will be called when response is
//arrived
pHttpTransaction->AddHttpTransactionListener(*this);
// Get Http Request
HttpRequest* pHttpRequest = pHttpTransaction->GetRequest();
// Set HTTP Method
pHttpRequest->SetMethod(NET_HTTP_METHOD_GET);
// Set Uri
pHttpRequest->SetUri(uri);
pHttpTransaction->Submit();
}
2.3.3. Kết quả đạt được

25

×