BÁO CÁO, Tìm hiểu lập trình trên Android
Tìm hiểu lập trình Android Mục lục Chương GIỚI THIỆU ANDROID 1.1 Khái niệm Android: 1.1.1 Android khác với hệ điều hành chạy thiết bị di động khác 1.1.2 Đặc tính mở Android: 1.2 Kiến trúc Android: 1.2.1 Android Platform: 1.2.2 1.2.3 1.2.4 1.2.5 Chương Tầng Linux Kernel: Native Libraries: Tầng Runtime: Tầng Application Framework: MÔI TRƯỜNG LẬP TRÌNH 10 2.1 Giới thiệu: 10 2.2 Android SDK: 10 2.3 Máy ảo Dalvik: 11 2.4 Các gói Java cần thiết: 11 2.5 Thành phần Eclipse tạo ứng dụng Android: 12 2.6 Thành phần quan trọng Android Project: 13 2.7 Chu kỳ sống ứng dụng Android 13 2.7.1 Chu kỳ sống thành phần 14 2.7.2 Activity Stack 14 2.7.3 Các trạng thái chu kỳ sống 15 2.7.4 Chu kỳ sống ứng dụng .15 2.7.5 Các kiện chu kỳ sống ứng dụng 16 2.7.6 Thời gian sống ứng dụng 16 2.7.7 Thời gian hiển thị Activity 17 2.7.8 Các hàm thực thi 17 2.8 Các cơng cụ cần thiết để lập trình Android hướng dẫn cài đặt: .17 2.8.1 Các công cụ cần thiết để lập trình: 17 2.8.2 Các bước cài đặt 17 2.9 Bắt đầu lập trình chương trình hello world đầu tiên: 20 2.10 Thành phần giao diện Android 23 SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam Tìm hiểu lập trình Android 2.10.1 View 23 2.10.2 VIEWGROUP: 23 2.11 Các Control 26 2.11.1 BUTTON 26 2.11.2 LISTVIEW 27 2.11.3 EDITTEXT 29 2.11.4 TEXTVIEW 30 2.11.5 CHECKBOX 30 2.11.6 MENUOPTION 31 2.11.7 CONTEXTMENU 32 2.12 Tùy biến control (custom control): 32 2.13 Ví dụ sử dụng Listview 35 Chương LẬP TRÌNH TRÊN ANDROID 38 4.1 Giới Thiệu Intents: 38 4.1.1 Thành phần Intents: 38 4.1.2 Sử dụng Intents khởi động cho Activities: 39 4.1.3 Intent không tường minh thực thi Activity: 40 4.1.4 Intent tường minh thực thi Activity 40 4.1.5 Sử dụng Intents gửi thông điệp ứng dụng Activity: 41 4.2 Giới Thiệu Adapters: 43 4.2.1 Một số Adapter : 43 4.2.2 Sử dụng Adapter hiển thị liệu: 43 4.3 Ví dụ sử dụng Intent để liên lạc Activity: 44 4.4 Kỹ thuật lưu trữ liệu Android 46 4.5 Lưu trữ liệu ứng dụng cách đơn giản: 47 4.5.1 Tạo lưu liệu với Share Preferences: 47 4.5.2 Truy xuất Shared Preferences 47 4.6 Lưu đọc tập tin Android: 49 4.6.1 Truy xuất tập tin Resources: 50 4.6.2 Các công cụ quản lý tập tin 50 4.7 Cơ sở liệu Android 50 4.7.1 Giới thiệu SQLite: 51 4.7.2 Cursors Content Values: 51 4.7.3 Sử dụng SQLiteOpenHelper: 52 4.7.4 Truy xuất tạo Cơ sở liệu không dùng SQLiteHelper: 52 SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam Tìm hiểu lập trình Android 4.7.5 Truy vấn sở liệu 52 4.7.6 Lấy kết từ Cursors 53 4.7.7 Thêm, cập nhật xóa dòng: 53 4.7.8 Thao tác sở liệu Android 54 4.7.9 Giới thiệu Content Providers 56 4.8 Một ứng dụng Demo sử dụng ContentProvider để quản lý sách: 59 4.9 Maps, Geocoding, Location Based Services 59 4.9.1 Sử dụng dịch vụ định vị 59 4.9.2 Cài đặt môi trường giả lập với Test Providers 59 4.9.3 Cập nhật vị trí với Emulator Location Providers 59 4.9.4 Chọn Location Provider 60 4.9.5 Tìm Providers có sẵn 60 4.9.6 Tìm kiếm Provider theo tiêu chí 61 4.9.7 Tìm địa (Finding Your Location) 61 4.9.8 Theo dõi sử di chuyển (Tracking Movement) 62 4.9.9 Sử dụng Goecoder 63 4.9.10 Reverse Geocoding 63 4.9.11 Forward Geocoding 64 4.9.12 Dùng MapView 65 4.9.13 Dùng MapActivity 66 4.9.14 Sử dụng Overlay 67 4.9.15 Dùng MapController 68 4.9.16 Chú ý tạo ứng dụng có sử dụng MapView 69 4.10 Làm việc Background 70 4.10.1 Giới Thiệu Services 70 4.10.2 Tạo Service 71 4.10.3 Khởi chạy, điều khiển tương tác với Sercice 71 4.10.4 Kết nối Activities với Services 72 4.10.5 Giới thiệu Thông báo Android 74 4.10.6 Giới thiệu Notification Manager 74 4.10.7 Tạo thông báo 75 4.10.8 Kích hoạt thơng báo .76 4.11 Sử dụng Media APIs 76 4.11.1 Chơi nhạc 77 4.11.2 Ghi âm 78 4.12 Sử dụng máy ảnh 79 SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam Tìm hiểu lập trình Android 4.12.1 4.12.2 4.12.3 Chương Cài đặt điều khiển camera .80 Sử dụng máy ảnh 80 Chụp ảnh 81 TỔNG KẾT 82 5.1 Kết đạt được: 82 5.2 Hướng phát triển đề tài: 82 5.3 Tài liệu tham khảo: 82 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam Tìm hiểu lập trình Android Chương GIỚI THIỆU ANDROID Như biết, có nửa nhân loại sử dụng máy di động để thoại giao tiếp qua mạng không dây Con số tỉ người tăng lên máy di động ngày "thông minh" với nhiều chức dịch vụ hấp dẫn, thị trường máy di động thông minh vượt xa máy vi tính tương lai gần Vì việc lập trình thiết bị di động ngày phổ biến phát triển mạnh mẽ Từ tảng mã nguồn mở, Google cho mắt Android chạy thiết bị di động Android có nhiều cơng cụ dụng cụ miễn phí để nghiên cứu phát triển phần mềm tảng Tài liệu giúp tìm hiểu Android cách viết ứng dụng tảng 1.1 KHÁI NIỆM VỀ ANDROID: Trước hết Android tảng phần mềm dựa mã nguồn mở Linux OS (Kernel 2.6) cho máy di động phần mềm trung gian (middleware) để hổ trợ ứng dụng mà người sử dụng cần đến Một cách định nghĩa khơng q chun mơn coi Android tên tảng mở cho thiết bị di động Google (gồm hệ điều hành, middleware số ứng dụng bản) Android đương đầu với số hệ điều hành (viết tắt HDH) dành cho thiết bị di dộng khác hâm nóng thị trường Windows Mobile, Symbian dĩ nhiên OS X (iPhone) Có thể nói cách nơm na Android HDH chạy thiết bị di động, giống Windows, Linux hay Mac chạy máy vi tính 1.1.1 Android khác với hệ điều hành chạy thiết bị di động khác Android thu hút ý giới cơng nghệ khắp tồn cầu đứa Google sử dụng giấy phép mã nguồn mở Đó sản phẩm kết tinh từ ý tưởng Khối Liên minh thiết bị cầm tay mở Google dẫn đầu, gồm 34 thành viên với công ty hàng đầu cơng nghệ di động tồn cầu Qualcomm, Intel, Motorola, Texas Instruments LG Electronics, nhà mạng T-Mobile, Sprint Nextel, NTT DoCoMo China Mobile Các nhà phát triển sử dụng miễn phí Kit Android Software Development để xây dựng ứng dụng SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam Tìm hiểu lập trình Android 1.1.2 Đặc tính mở Android: Android xây dựng phép nhà phát triển để tạo ứng dụng di động hấp dẫn, tận dụng tất tính điện thoại cung cấp Nó xây dựng để thực mở Ví dụ, ứng dụng gọi chức lõi điện thoại thực gọi, gửi tin nhắn văn bản, cách sử dụng máy ảnh, cho phép nhà phát triển để tạo nhiều ứng dụng phong phú cho người dùng (điều chưa có Windows Phone7 Microsoft) Android xây dựng mã nguồn mở Linux Kernel Hơn nữa, sử dụng máy ảo tuỳ chỉnh thiết kế để tối ưu hóa nhớ tài nguyên phần cứng môi trường di động Android không phân biệt ứng dụng lõi điện thoại ứng dụng bên thứ ba Tất xây dựng để truy cập khả thiết bị di động cung cấp cho người sử dụng với dải rộng ứng dụng dịch vụ Với thiết bị xây dựng Android, người dùng hồn tồn thích ứng với điện thoại đến lợi ích họ Với Android, nhà phát triển xây dựng ứng dụng cho phép người dùng xem vị trí bạn bè họ cảnh báo họ có vùng phụ cận cho họ hội để kết nối Android cung cấp truy cập đến loạt thư viện cơng cụ hữu ích sử dụng để xây dựng ứng dụng phong phú Ví dụ, Android cho phép thiết bị giao tiếp với tạo điều kiện cho đồng đẳng rich-to-peer ứng dụng xã hội Ngoài ra, Android bao gồm tập hợp đầy đủ công cụ xây dựng công phu, với việc cung cấp tảng phát triển, với suất cao nhìn sâu vào ứng dụng 1.2 KIẾN TRÚC CỦA ANDROID: "Understanding Android" cách mà ta tiếp cận lập trình Android thấu hiểu kiến trúc hệ thống Chúng ta khơng cần hiểu rõ cấu trúc HDH Chúng ta lập trình ứng dụng HDH đó, điều mà nhà sản xuất muốn release SDK với framework có sẵn họ Như biết điều có mặt tốt xấu Framework tầng cao cấp dành cho lập trình SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam Tìm hiểu lập trình Android viên, có giới hạn nó, có thể lập trình ứng dụng phổ biến không nên tiến tới ứng dụng cao cấp sâu vào hệ thống HDH Theo cách mình, trước bắt đầu học Android, nên nghiên cứu qua thân HDH Android, khơng cần phải hiểu rõ thể nào, mục đích quan trọng có nhìn chung tồn diện Android 1.2.1 Android Platform: Bao gồm HDH Android đầy đủ tính năng, ứng dụng tầng trung gian để developer mở rộng, tùy chỉnh thêm vào component họ Có tầng HDH Android: Application Framework, Android Runtime, Native Libraries, Linux Kernel Mỗi tầng làm việc nhờ giúp đỡ tầng bên 1.2.2 Tầng Linux Kernel: Đây nhân HDH Android, xử lý hệ thống phải thông qua tầng Linux Kernel cung cấp trình điều khiển thiết bị phần cứng (driver) như: camera, USB, Wifi, Bluetooth, Display, Power Management Android dựa Linux phiên 2.6 lựa chọn tính cốt lõi bảo mật, quản lý nhớ, quản lý tiến trình, mạng stack trình điều khiển phần cứng Kernel hoạt động lớp trừu tượng phần cứng phần mềm lại hệ thống 1.2.3 Native Libraries: System C library - có nguồn gốc từ hệ thống thư viện chuẩn C (libc), điều chỉnh thiết bị nhúng Linux Media Libraries - mở rộng từ PacketVideo's OpenCORE; thư viện hỗ trợ playback recording nhiều định dạng video image phổ biến: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG Surface Manager - quản lý việc hiển thị kết hợp đồ họa 2D 3D SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam Tìm hiểu lập trình Android LibWebCore - Android dùng lại webkit engine cho việc render trình duyệt mặc định HDH Android browser cho dạng web nhúng (như HTML nhúng) SGL - 2D engine 3D libraries - Thư viện 3D dựa OpenGL ES 1.0 API, có nâng cấp tăng tốc "hardware 3D acceleration" FreeType - render bitmap vector font SQLite - quản lý database ứng dụng 1.2.4 Tầng Runtime: Mỗi ứng dụng Android chạy proccess riêng Dalvik VM (máy ảo) Dalvik viết để chạy nhiều máy ảo lúc cách hiệu thiết bị Máy ảo Dalvik thực thi file mang định dạng dex (Dalvik Excutable), định dạng định dạng tối ưu hóa để chiếm vùng nhớ vừa đủ xài nhỏ VM chạy class (đã compile trước 1trình biên dịch ngôn ngữ Java), VM chạy class nhờ chương trình DX tool convert class sang định dạng dex 1.2.5 Tầng Application Framework: Đây tầng mà Google xây dựng cho developer để phát triển ứng dụng họ Android, cách gọi API có sẵn mà Google viết để sử dụng tính phần cứng mà không cần hiểu cấu trúc bên Bằng cách cung cấp tảng phát triển mở, Android cho nhà phát triển khả xây dựng ứng dụng phong phú sáng tạo Nhà phát triển tự tận dụng thiết bị phần cứng, thông tin địa điểm truy cập, dịch vụ chạy nền, thiết lập hệ thống báo thức, thêm thông báo để trạng thái, nhiều, nhiều Tất ứng dụng thường gồm dịch vụ hệ thống sau: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam Tìm hiểu lập trình Android View UI dùng để xây dựng layout ứng dụng bao gồm: list view, text field, button, dialog, form Content Providers cho phép ứng dụng truy cập liệu từ ứng dụng khác (như ứng dụng ta lấy thơng tin Contacts điện thoại Android), để chia sẻ liệu riêng ứng dụng Resource Manager cung cấp cách thức truy cập đến non-code resources asset, graphic, image, music, video Notification Manager cho phép tất ứng dụng hiển thị thơng báo HDH Activity Manager quản lý vòng đời ứng dụng Ở góc nhìn người dùng ta có thêm tầng application (là ứng dụng viết), sau sơ đồ tổng quát hình 1.1: 1-1 Kiến trúc Android SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam Tìm hiểu lập trình Android Chương MƠI TRƯỜNG LẬP TRÌNH 2.1 GIỚI THIỆU: Trong chương giới thiệu cơng cụ lập trình cho Android (Android Development Tools) Chúng ta dần làm quen với Eclipse Android Development Tool plug-in, thông qua Android SDK cơng cụ nó, chạy ứng dụng Android Emulator(tạm dịch trình giả lập giao diện Android PC) Với kĩ tay, tìm hiểu gói Java packages cung cấp SDK giúp nâng cao khả lập trình Android 2-1 Mơi trường lập trình Android Eclipse OpenSource IDE Coding Debugging Command-Line tools •File transfer tools Android Development Tools (plug-in) SDK Android Emulator •Multiple skins •Network connectivity options •GSM simulation tester •Integrated with Eclipse via Android Development Tools Emulator profile configuration Emulator launch Process & file system viewing Log viewing plug-in Android Development Android Device •Physical phone hardware SDK Documentation 2.2 ANDROID SDK: Android SDK, viết tắt Android Software Development Kit, gọi “cơng cụ phát triển phần mềm” mà cụ thể phát triển ứng dụng cho Android OS Đến hiểu đơn giản Google Adroid SDK cơng cụ Google xây dựng phát hành miễn phí đến giới Developer để họ dễ dàng xây dựng phát triển ứng dụng chạy Android OS Android SDK có đặc tính sau: Được phát triển cung cấp miễn phí SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 10 Tìm hiểu lập trình Android 4.9.16 Chú ý tạo ứng dụng có sử dụng MapView Khơng giống cách tạo chạy ứng dụng chương trước, có khác biệt nho nhỏ chạy ứng dụng MapView việc chọn Emulator hay chọn Emulator có hỗ trợ Google APIs Hình 4-10 Tạo emulator hỗ trợ Geocoder MapView Một ý phải có dùng MapView, sau cách lấy key (chúng ta phải kết nối Internet) : Lấy debug.keystore Vào Windows > Prefs > Android > Build để lấy đường dẫn bên SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 69 Tìm hiểu lập trình Android Lấy key: Vào cmd gõ: keytool -list -alias Androiddebugkey -keystore -storepass Android -keypass Android Vào link http://code.google.com/Android/maps-api-signup.html dán MD5 fingerprint code vào click Generate API key , site s ẽ tự sinh cho key 4.10 LÀM VIỆC TRÊN BACKGROUND 4.10.1 Giới Thiệu Services Không giống hoạt động khác, Services trình bày giao diện đồ họa phong phú cho người dùng Services chạy cập nhật Content Providers, đóng Intent kích hoạt thơng báo, Services cách để thực xử lý hoàn hảo xử lý kiện thường xuyên ứng dụng khơng nhìn thấy hoạt động services, không hoạt động bị tắt Tuy khơng có giao diện trực quan Serviecs bắt đầu, dừng lại kiểm sốt từ thành phần ứng dụng khác bao gồm Services, Activities Broadcast Receivers Nếu ứng dụng thường xuyên liên tục thực hoạt động mà không phụ thuộc trực tiếp vào liệu người dùng đưa vào (input), Sevices câu trả lời Máy nghe nhạc MP3, giám sát tọa độ ví dụ ứng dụng chạy cập nhật mà khơng có thành phần tương tác trực quan nhìn thấy Các Services thiết kế để chạy nền, cần phải bắt đầu, dừng lại, kiểm soát thành phần ứng dụng khác Trong phần sau đây, học cách để tạo Service làm để bắt đầu kết thúc cách sử dụng phương thức SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 70 Tìm hiểu lập trình Android startServices Sau học cách để ràng buộc Services cho Activity, cung cấp giao diện phong phú cho tương tác 4.10.2 Tạo Service Để xác định Services ta tạo lớp kế thừa tử lớp Service sở Chúng ta cần ghi đè lên onBind onCreate trình bày sau đây: import Android.app.Service; import Android.content.Intent; import Android.os.IBinder; public class MyService extends Service { @Override public void onCreate() { / TODO: Actions to perform when service is created } @Override public IBinder onBind(Intent intent) { / TODO: Replace with service binding implementation return null; } } Trong hầu hết trường hợp nên ghi đè lên onStart Điều gọi Services bắt đầu gọi đến startService, thể phương thức ghi đè lên onStart sau: @Override public void onStart(Intent intent, int startId) { // TODO: Actions to perform when service is started } Một xây dựng Service phải đăng ký tập tin mainifest tab sau: 4.10.3 Khởi chạy, điều khiển tương tác với Sercice Để khởi chạy Service gọi startService Nếu Service yêu cầu quyền truy cập mà ứng dụng khơng có lời gọi bị chuyển vào SecurityException sau: // khởi tạo không tường minh startService(new Intent(MyService.MY_ACTION)); SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 71 Tìm hiểu lập trình Android // khởi tạo tườngm inh startService(new Intent(this, MyService.class)); Để dừng Service ta gọi stopService, đưa vào Intent để xác định Service ngăn chặn ComponentName service = startService(new Intent(this, BaseballWatch.class)); / sử dụng tên service để dừng Service stopService(new Intent(this, service.getClass())); / dừng service tường minh try { Class serviceClass = Class.forName(service.getClassName()); stopService(new Intent(this, serviceClass)); } catch (ClassNotFoundException e) {} Nếu startService gọi Service chạy, phương thức onStart Service thực lần Các gọi đến startService khơng lồng lên có gọi nhất, để chấm dứt sử dụng stopService khơng kể lần startService gọi 4.10.4 Kết nối Activities với Services Khi hoạt động liên kết với Service thân trì tham chiếu đến Service đó, cho phép gọi phương thức Service chạy Liên kết có sẵn cho hoạt động, thừa hưởng tất từ giao diện với Service Để hỗ trợ ràng buộc cho Service thực phương thức onBind ví dụ đơn giản sau đây: private final IBinder binder = new MyBinder(); @Override public IBinder onBind(Intent intent) { return binder; } public class MyBinder extends Binder { MyService getService() { return MyService.this; } SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 72 Tìm hiểu lập trình Android } Sự kết nối Service hoạt động thể Serviceconnection Ta cần phải thực ServiceConnection mới, ghi đè lên phương thức onServiceConnection onServiceDisconnected để tham chiếu đến Service kết nối thành lập // liên kết với service private MyService serviceBinder; // điều khiển kết nối Acitivity Service private ServiceConnection mConnection = new ServiceCo nnection() { public void onServiceConnected(ComponentName className, IBinder service) { // gọi kết nối tạo serviceBinder = ((MyService.MyBinder)service).getService(); } public void onServiceDisconnected(ComponentName className) { // ngắt kết nối serviceBinder = null; } }; Để gọi Services cần truyền vào Intent phương thức bindService: @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); // Bind to the service Intent bindIntent = new Intent(MyActivity.this, MyService.class); bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE); } Liên lạc với Service ứng dụng khác cách sử dụng Broadcast Intent hay biến Bundle Intent sử dụng khởi động Service SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 73 Tìm hiểu lập trình Android 4.10.5 Giới thiệu Thông báo Android Thông báo cách cho ứng dụng để cảnh báo người sử dụng, mà không cần sử dụng hành động Thông báo xử lý Manager Notification, bao gồm khả năng: • Tạo biểu tượng trạng thái Hiển thị thêm thông tin cửa sổ mở rộng trạng thái Đèn Flash/LEDs Điện thoại rung Ân báo động(nhạc chuông,âm thông tin lưu trữ) Thơng báo tồn qua lặp lại liên tiếp sử dụng biểu tượng trạng thái.Tình trạng biểu tượng cập nhật thường xuyên mở rộng để hiển thị thêm thơng tin sử dụng tình trạng cửa sổ hình Hình 4-11 4.10.6 Giới thiệu Notification Manager Notification Manager hệ thống dịch vụ sử dụng để xử lý thông báo, để tham chiếu đến cách sử dụng phương thức: getSystemService thể đoạn code sau: String svcName = Context.NOTIFICATION_SERVICE; NotificationManager notificationManager; notificationManager = (NotificationManager)getSystemService(svcName); SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 74 Tìm hiểu lập trình Android Sử dụng Manager thơng báo, kích hoạt thơng báo mới, sửa đổi có, loại bỏ khơng cần thiết không mong muốn 4.10.7 Tạo thông báo Tạo cấu hình thơng báo thực ba phần: Trước tiên, tạo đối tượng thông báo đưa vào biểu tượng để hiển thị trạng thái với trạng thái tickertext thời gian thông báo đoạn code sau: / chọn hình ảnh làm icon tác vụ int icon = R.drawable.icon; / chuỗi xuất chạy thông báo String tickerText = “Notification”; / The extended status bar orders notification in time order long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); Các ticker-text di chuyển dọc theo trạng thái thông báo phát Thứ hai, cấu hình xuất thông báo cửa sổ trạng tháimở rộng sử dụng phương pháp setLatestEventInfo Điều mở rộng cửa sổ trạng thái hiển thị biểu tượng thời gian quy định xây dựng cho thấy tiêu đề chuỗi chi tiết Thông báo thường xuất cho yêu cầu hành động ý, định PendingIntent thoát người dùng nhấp vào mục thông báo Context context = getApplicationContext(); / chuỗi mở rộngcửa sổ thông báo String expandedText = “Extended status text”; / tiêu đề String expandedTitle = “Notification Title”; // Intent để khởi chạy activity cửa sổ thông báo mở rộng click Intent intent = new Intent(this, MyActivity.class); PendingInten tlaunchIntent= PendingIntent.getActivity(context, 0,intent, 0); SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 75 Tìm hiểu lập trình Android notification.setLatestEventInfo(context,expandedTitle,expandedTe xt, launchIntent); Chúng ta sử dụng thuộc tính number để hiển thị số kiện cho biểu tượng trạng thái thể Thiết lập giá trị lớn 1, tất thay đổi thông báo khơng cần phải kích hoạt để áp dụng thay đổi, để loại bỏ lớp phủ(các thông báo phủ lên nhau), ta thiết lập giá trị -1 notification.number++; Cuối cùng, cải thiện Thông báo cách sử dụng thuộc tính khác đối tượng thơng báo chẳng hạn thiết bị đèn LED, rung điện thoại, âm (nhac, chng) 4.10.8 Kích hoạt thơng báo Để bật thông báo đưa vào phương thức notify đối tượng NotificationManager số nguyên ID, đoạn code sau: int notificationRef = 1; notificationManager.notify(notificationRef, notification); Chúng ta sử dụng ID để hủy bỏ Thông báo cách gọi phương thức Cancel NotificationManager, thể sau: notificationManager.cancel(notificationRef); 4.11 SỬ DỤNG CÁC MEDIA APIS Các công nghệ đại ngày cạnh tranh với điện thoại di động có mặt khắp nơi máy nghe nhạc phương tiện xách tay kỹ thuật số Kết thăm dò thị trường cho thấy thiết bị điện thoại di động quan tâm đáng kể nhiều người tiêu dùng Android đưa nhiều thư viện cho ứng dụng cung cấp chức đa phương tiện gồm ghi âm video, âm hình ảnh lưu trữ cục ứng dụng Android hỗ trợ định dang đa phương tiện sau đây: SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 76 Tìm hiểu lập trình Android JPEG, PNG, OGG, Mpeg 4, 3GPP, MP3, Bitmap 4.11.1 Chơi nhạc Đa phương tiện Android xử lý lớp MediaPlayer Chúng ta xem lại thơng tin lưu trữ ứng dụng, đia tập tin, từ mạng URI Để chơi nhạc, ta tạo Media Player, gán cho đường dẫn đến tập tin nhạc để chơi sử dụng phương thức sedDataSource Trước bắt đầu chơi nhạc, cần phải chuẩn bị đoạn mã sau: String MEDIA_FILE_PATH = Settings.System.DEFAULT_RINGTONE_ URI.toString(); MediaPlayer mpFile = new MediaPlayer(); try { mpFile.setDataSource(MEDIA_FILE_PATH); mpFile.prepare(); mpFile.start(); } catch (IllegalArgumentException e) {} catch (IllegalStateException e) {} catch (IOException e) {} Ngoài ra, tạo phương thức tĩnh (static) làm việc shortcuts, chấp nhận đường dẫn đến file nhạc tham số đoạn mã sau: MediaPlayer mpRes = MediaPlayer.create(context, R.raw.my_sound); Một Media Player gọi để bắt đầu chơi thể sau đây: mpRes.start(); mpFile.start(); Media Player bao gồm chức dừng lại, tạm dừng phương thức tìm kiếm phương thức tìm vị trí, thời gian kích thước hình ảnh thơng tin liên quan Để lặp vòng phát lặp lại ta sử dụng phương thức setLooping Một không sử dụng Media Player, ta gọi release để giải phóng tài nguyên liên quan trình bày sau: SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 77 Tìm hiểu lập trình Android mpRes.release(); mpFile.release(); 4.11.2 Ghi âm Ghi âm xử lý lớp MediaRecorder để ghi âm video, tạo đối tượng MediaRecorder đoạn code sau: MediaRecorder mediaRecorder = new MediaRecorder() Trước ghi âm media Android, ứng dụng cần cấp phép RECORD_AUDIO RECORD_VIDEO Thêm thẻ uses-permission ứng dụng manifest sau: Máy ghi âm(Media Recorder) sử dụng để cấu hình video quay phim (bao gồm camera microphone), định dạng đầu ra, kích thước video, tỷ lệ khung hình, video thu âm video để sử dụng Các đoạn code sau cho thấy làm để cấu hình máy ghi âm để ghi lại âm từ micro cách sử dụng định dạng mặc định mã hóa / lấy nguồn video mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); / thiết lập định dạng đầu mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFA ULT); // thiết lập mã hóa âm để sử dụng mediaRecorder.setAudioEncoder (MediaRecorder.AudioEncoder.DEFAULT); Khi xác định đầu vào định dạng đầu ra, định tập tin để lưu trữ media sử dụng phương thức setOutputFile hình đây: mediaRecorder.setOutputFile(“myoutputfile.mp4”); Để bắt đầu ghi âm, ta gọi prepare phương thức start sau: mediaRecorder.prepare(); mediaRecorder.start(); SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 78 Tìm hiểu lập trình Android Khi hoàn thành ta gọi stop để kết thúc, release để giải phóng nguồn tài nguyên máy ghi âm mediaRecorder.stop(); mediaRecorder.release(); Sau ghi âm media ta tạo đối tượng ContentValues để thêm ghi âm vào Media Store.Các liệu mà định bao gồm chi tiết tên, thời gian, mã địa lý cho tập tin thể đoạn code sau đây: ContentValues content = new ContentValues(3); content.put(Audio.AudioColumns.TITLE, “TheSoundandtheFury”); content.put(Audio.AudioColumns.DATE_ADDED, System.currentTimeMillis() / 1000); content.put(Audio.Media.MIME_TYPE, “audio/amr”); Chúng ta cần phải đường dẫn cho tâp tin tạo: content.put(MediaStore.Audio.Media.DATA,“myoutputfile.mp4”); Có thể truy cập vào ContentResolver ứng dụng, sử dụng để thêm dòng vào MediaStore đoạn code sau: ContentResolver resolver = getContentResolver(); Uri uri = resolver.insert(Audio.Media.EXTERNAL_CONTENT_ URI, content); Khi thông tin tập tin lưu trữ, thơng báo sẵn sàng dùng Intent để phát sau: sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri)); 4.12 SỬ DỤNG MÁY ẢNH Sự phổ biến máy ảnh kỹ thuật số (đặc biệt điên thoại di động) gây giảm giá đáng kể Bây thật khó, chí tìm điện thoại động mà khơng có máy ảnh thiết bị Android trường hợp ngoại lệ Để truy cập vào phần cứng máy ảnh cần phải thêm CAMERA cho phép ứng dụng manifest trình bày sau đây: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 79 Tìm hiểu lập trình Android Để truy cập vào dịch vụ Camera, sử dụng phương thức tĩnh open lớp Camera Khi hoàn thành với Camera, để kết thúc dịch vụ ta gọi release sử dụng mơ hình đơn giản thể đoạn code sau: Camera camera = Camera.open(); [ … Do things with the camera … ] camera.release(); 4.12.1 Cài đặt điều khiển camera Đã có sẵn đối tượng Camera.Parameters để thiết lập cho Camera hành Gọi phương thức getParameters Camera để truy cập vào thông số hành Chúng ta sử dụng phương thức set* thông số để quay trở lại thiết lập sửa đổi Để áp dụng thay đổi ta gọi setParameters đưa vào giá trị thay đổi sau: Camera.Parameters parameters = camera.getParameters(); parameters.setPictureFormat(PixelFormat.JPEG); camera.setParameters(parameters); 4.12.2 Sử dụng máy ảnh Truy cập vào video máy ảnh có nghĩa kết hợp trực tiếp video vào ứng dụng Một thú vị mà ứng dụng Android sử dụng chức lớp sở Máy ảnh hiển thị thời gian thực giao diện thể hiên đoạn code sau đây: camera.setPreviewDisplay(mySurface); camera.startPreview(); […] camera.stopPreview(); Chúng ta định PreviewCallback để chọn cho khung hình xem, cho phép thao tác hiển thị khung hình xem Gọi phương thức setPreviewCallback đối tượng Camera, đưa vào PreviewCallback thực ghi đè lên phương thức onPreviewFrame trình bày sau: camera.setPreviewCallback(new PreviewCallback() { SVTH: Phạm Quang Đạo – Nguyễn Hồng Nam 80 Tìm hiểu lập trình Android public void onPreviewFrame(byte[] _data, Camera _camera) { // TODO Do something with the preview image } }); 4.12.3 Chụp ảnh Chụp ảnh cách gọi takePicture đối tượng Camera, đưa vào ShutterCallback PictureCallback thực cho hình ảnh RAW JPEG Mỗi lần gọi hình ảnh nhận mảng (byte) đại diện cho hình ảnh định dạng thích hợp, gọi lại cánh cửa chớp kích hoạt sau cánh cửa chớp đóng lại private void takePicture() { camera.takePicture(shutterCallback, rawCallback, jpegCallback); } ShutterCallback shutterCallback = new ShutterCallback() { public void onShutter() { // TODO Do something when the shutter closes }}; PictureCallback rawCallback = new PictureCallback() { public void onPictureTaken(byte[] _data, Camera _camera) { // TODO Do something with the image RAW data }}; PictureCallback jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] _data, Camera _camera) { // TODO Do something with the image JPEG data } }; SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 81 Tìm hiểu lập trình Android Chương TỔNG KẾT 5.1 KẾT QUẢ ĐẠT ĐƯỢC: Tìm hiều tảng hệ điều hành thiết bị di động Android Một hệ điều hành mã nguồn mở di động lên phát triển chóng mặt giới thời gian gần Một đặc tính tuyệt vời Android tính mở nó, dựa đặc tính nhà sản xuất tùy biến để tạo giao diện đặc trưng cho người sử dụng Ngoài Android thể ưu vượt trội hệ điều hành thiết bị di động khác tích hợp sẵn dịch vụ hỗ trợ từ Google đầy đủ nhất: Gmail, Google Talk, Google Calendar… Nắm bắt cách tạo giao diện từ công cụ Android cung cấp cách tùy chỉnh công cụ này: Linear Layout, Relative Layout, … control : Listview, Button, Checkbox, … Tìm hiểu thực hành lập trình chương trình nhỏ thiết bị giả lập PC, dùng Eclipse SDK mà Google cung cấp Qua chương qua tìm hiểu thành phần quan trọng Android như: Activity, Intent, Broadcast Resever, ContentProvider, MapView, Geocoder, Services, … sử dụng phần cứng Android Camera để quay phim, chụp ảnh 5.2 HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI: Tiếp tục tìm hiểu thành phần khác Android nhằm nắm vững nhiều thành phần Android Xây dựng ứng dụng mang tính khả thi hệ điều hành 5.3 TÀI LIỆU THAM KHẢO: Các Ebook: Unlocking Android, Development Professional Android Application Các trang web: http://developer.Android.com/ SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam http://vietAndroid.com/tin-tuc.html, 82 ... Android. app Android application model access Android. content—truy xuất liệu Android Android.net bao gồm Uri class d ng cho việc truy xuất nội dung khác Android. graphics—đồ họa Android. opengl—các... bản ,bao gồm XML Android. view—thành phần UI (giao diện ng ời d ng) Android. webkit—Browser functionality Android. widget—thành phần UI mức độ cao Trong gói gần lõi ng d ng Android Android.app, Android. view... viewing Log viewing plug-in Android Development Android Device •Physical phone hardware SDK Documentation 2.2 ANDROID SDK: Android SDK, viết tắt Android Software Development Kit, gọi “c ng cụ