1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề cương lập trình ứng dụng đa phương tiện với android

295 205 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

MỤC LỤC Bài 1: Tổng quan đa phương tiện 1.1 Giới thiệu chung 1.2 Một số khái niệm 1.2.1 Thế phương tiện 1.2.2 Thế đa phương tiện 1.2.3 Thế truyền thông đa phương tiện 1.3 Hoàn cảnh sử dụng Multimedia 1.4 Các chuẩn Multimedia thông dụng 1.5.Tổng quan trình phát triển Multimedia 11 1.6 Ứng dụng đa phương tiện 12 1.6.1 Giáo dục 12 1.6.2 Thông tin bán hàng 13 1.6.2 Y học 13 1.6.3 Hội thảo trực tuyến 13 1.6.4 Giải trí 13 1.6.5 Công nghiệp du lịch 14 1.6.6 Điều tra tội phạm 14 Bài 2: Vẽ đồ họa 2D 17 2.1 Ví dụ chương trình đồ họa 2D 17 2.2 Layout 18 2.2.1 Thiết kế Layout XML 18 2.2.2 Hiển thị Layout từ file XML 19 2.2.3 Một số thuộc tính đối tượng layout 19 2.3 Canvas Drawing 21 2.4 Drawables 29 2.4.1 Drawables gì? 29 2.4.2 Sử dụng drawables cho views 29 2.4.3 Loading Bitmaps Drawables 30 2.4.4 XML Drawables 31 2.4.4.1 Shape Drawables 31 2.4.4.2 State Drawables 32 2.4.4.3 Transition Drawables 32 2.4.4.4 Vector drawables 33 2.4.4.6 Animation Drawables 33 Bài 3: Animation 44 3.1 Animation 44 3.1.1 Tween Animation 44 3.1.2 Một số animation thông dụng 45 3.1.3 Các bước thực Animation Android 50 3.1.4 Ví dụ Animation 51 3.2 Tạo ứng dụng đồ họa 2D 57 Bài 4: Bài tập Canvas, Drawable, Animation 61 Bài 5: Camera 64 5.1 Khai báo Manifest 64 5.2 Tạo ứng dụng Camera sử dụng Intent 65 5.2.1 Image capture intent 65 5.2.2 Video capture intent 66 5.2.3 Receiving camera intent result 67 5.2.4 Chương trình demo sử dụng Camera Intent 68 5.3 Tạo ứng dụng Camera sử dụng lớp Camera 70 5.3.1 Sử dụng lớp Camera 70 5.3.2 Lưu file Media 75 5.3.2 Camera2 76 5.4 Demo ứng dụng Camera 84 5.4.1 Xây dựng chương trình tự động chụp ảnh sau khoảng thời gian m giây 84 Bài 6: Graphic Touch Events 89 6.1 Bitmap 89 6.2 Touch Events 95 6.3 Lưu Bitmap vẽ Canvas 107 6.4 Xử lý Bitmap 108 Bài 7: OpenGL 111 7.1 Thiết lập môi trường cho OpenGL ES 111 7.1.1 Khai báo sử dụng OpenGL ES Manifest 112 7.1.2 Tạo đối tượng GLSurfaceView 112 7.1.3 Xây dựng lớp Renderer 113 7.2 Tạo đối tượng hình học 114 7.2.1 Định nghĩa hình tam giác 114 7.2.2 Define a Square 115 7.2.3 Initialize Shapes 116 7.2.4 Vẽ đối tượng hình học 116 7.3 Tạo chuyển động cho đối tượng nhờ OpenGL 120 7.3.1 Define a Projection 120 7.3.2 Define a Camera View 121 7.3.3 Apply Projection Camera Transformations 122 7.3.4 Rotate a Shape 123 Bài 8: Xây ứng dụng Graphics 125 Bài 9: Giới thiệu Audio Android 126 9.1 Phát lại âm thanh( Audio Playback) 126 9.2 Định dạng âm hỗ trợ( Supported Audio Formats) 126 9.3 Sử dụng Audio Player có sẵn thông qua Intent( Using the Built-In Audio Player via an Intent) 127 9.4 Tạo ứng dụng Audio-Playing tùy chỉnh 130 9.4.1 Start Media Player 131 9.4.2 Control Playback 132 9.5 MediaStore cho Audio 138 9.5.1 Truy cập vào Audio từ MediaStore( Accessing Audio from the MediaStore) 138 9.5.2 Duyệt âm MediaStore 141 Bài 10: Background networked Audio 149 10.1 Background Audio Playback 149 10.1.1 Service( dịch vụ) 149 10.2 Networked Audio 167 Bài 11: Audio Capture 189 11.1 Thu âm với Intent 189 11.2 Sử dụng MediaRecorder để thu âm 193 11.2.1 Nguồn MediaRecorder Audio 194 11.2.2 Định dạng đầu MediaRecorder 194 11.2.3 Mã hóa âm MediaRecorder 194 11.2.4 MediaRecorder Output and Recording 195 11.3 Xây dựng chương trình AudioCapture 196 Ví dụ Tạo ứng dụn Raw Audio Capture Playback 218 Bài 12: Bài tập Audio 227 Bài 13: Giới thiệu Video 228 13.1 Video Playback 228 13.1.1 Những định dạng hỗ trợ 228 13.1.2 Phát lại sử dụng intent 229 13.1.3 Phát lại sử dụng VideoView 231 13.1.4 Thêm Controls với MediaController 233 13.2 Playback sử dụng MediaPlayer 234 13.2.1 Trạng thái MediaPlayer 234 13.3 Tạo chương trình phát Video sử dụng MediaPlayer 235 Bài 14: Video nâng cao 249 14.1 Lấy Video từ MediaStore 249 14.2 Video Thumbnail từ MediaStore 250 14.3 Tạo ứng dụng phát video sử dụng MediaStore 250 14.4 Networked Video 255 14.4.1 Các giao thức mà Android hỗ trợ 255 14.4.2 Network Video Playback 257 Bài 15: Quay Video 265 15.1 Quay Video sử dụng Intent 265 15.2 Tạo ứng dụng quay Video tùy chỉnh 270 15.2.1 MediaRecorder for Video 270 15.2.2 Nguồn Audio Video 270 15.2.3 Định dạng file thu 271 15.2.4 Mã hóa âm video 272 15.2.5 Bitrate âm video: 272 15.2.6 Thiết lập tần số âm 273 15.2.7 Kênh âm 273 15.2.8 Số lượng khung hình Video giây 273 15.2.9 Độ phân giải Video 273 15.2.7 Giới hạn dung lượng video 273 15.2.8 Thời lượng tối đa 274 15.2.9 Profile 274 15.2.10 Vị trí lưu 275 15.2.11 Preview Surface 276 Bài 16: Tạo ứng dụng Video 283 Bài 17: Xuất Media sử dụng Webservices 284 17.1 Web Services 284 17.2 HTTP Requests 284 17.3 JSON (JavaScript Object Notation) 286 15.4 Pulling Flickr hình ảnh sử dụng JSON 289 TÀI LIỆU THAM KHẢO 295 Bài 1: Tổng quan đa phương tiện 1.1 Giới thiệu chung Sản phẩm công nghệ Multimedia xâm nhập ngày sâu, rộng vào lĩnh vực đời sống xã hội Có thể nói sản phẩm công nghệ có mặt khắp nơi, từ công sở đến gia đính Nó xuất nhiều lĩnh vực từ giáo dục, y tế, đến vui play giải trì, nghiên cứu khoa học v v Sức mạnh sản phẩm công nghệ Multimedia mang lại đa dạng phong phú dạng thông tin Người ta thu nhận, xử lý thông tin thông qua thị giác, thính giác nhờ âm thanh, hính ảnh, văn mà công nghệ Multimedia mang lại Điều làm cho hiệu thu nhận, xử lý thông tin cao so với thông tin dạng văn Ý tưởng đặt móng cho lĩnh vực công nghệ có từ năm 1945 Ông Vanner Brush ,giám đốc quan nghiên cứu phát triển khoa học chình phủ Mỹ lúc (Director ofthe office Scientific Research Development in the US Gouverment) đưa câu hỏi là, liệu chế tạo loại thiết bị cho phép lưu trữ dạng thông tin để thay cho sách, nói cách khác chẳng nhẽ thông tin lưu trữ dạng sách? Nhận thức ý nghĩa quan trọng loại thiết bị có tình chất trên, hàng loạt nhà khoa học, công nghệ tập trung nghiên cứu Nó cở sở hay tảng công nghệ Multimedia ngày Năm 1960 Ted Nelson Vàrries Van Dam công bố công trính nói kỹ thuật truy nhập liệu tên gọi Hypertext Hypermedia Kỹ thuật giữ nguyên tên sử dụng rộng rãi dịch vụ Web Internet Năm 1968 nglebvà đưa hệ thống sử dụng Hypertext máy tình với tên NLS Bộ quốc phòng Mỹ thành lập tổ chức DARPA (US deference advanced Research Prọject Agency) để nghiên cứu công nghệ Multimedia Năm 1978 phòng nghiệm khổng lồ MIT Media Laboratory chuyên nghiên cứu công nghệ Multimedia thành lập Chỉ sau thời gian ngắn hoạt động, nhận thức tầm quan trọng ý nghĩa xã hội công nghệ Multimedia, người ta đầu tư gần 40 triệu USD cho phòng thí ghiệm Một loạt công ty, hãng lớn cho đời phòng nghiệm Multimedia AT & T, BELL, Olivity Những nỗ lực không ngừng nhà khoa học,công nghệ cho phep người ta gặt hái nhiều kết có tình chất móng cho lĩnh vực Multimedia Những kết đa nhanh chóng triển khai ứng dụng lĩnh vực truyền hính, viễn thông v.v 1.2 Một số khái niệm 1.2.1 Thế phương tiện Trong suốt chiều dài lịch sử, thông tin chuyển tải thông qua phương tiện Âm thanh, chẳng hạn giọng nói người, chình loại phương tiện qua nhiều kỉ trước chữ viết sử dụng rộng rãi thí nói chuyện cách thức chủ yếu để trao đổi thông tin Sau người bắt đầu kể chuyện để lại thông tin sống mính thông qua hính vẽ, tranh Sự đời chữ viết cho người phương tiện khác để diễn đạt ý nghĩ mính Ngày nay, người thường sử dụng lời nói, âm thanh, âm nhạc, văn bản, hính ảnh, đồ hoạ, hoạt ảnh video để truyền tải thông tin Những thứ tất loại phương tiện khác (thuật ngữ media số nhiều medium) phương tiện thường dùng để biểu đạt loại thông tin định Như ý nghĩa này, phương tiện đơn giản cách thức để truyền đạt thông tin 1.2.2 Thế đa phương tiện Trước tiên người ta hỏi đa phương tiện ? Đa phương tiện tích hợp văn bản, âm thanh, hình ảnh tất loại phần mềm có điều khiển môi trường thông tin số Định nghĩa đa phương tiện đề cập sau Dữ liệu đa phương tiện gồm liệu về: Văn bản; Hình ảnh; Âm thanh; Hính động Con người có nhu cầu diễn tả trạng thái minh; họ có nhiều loại hình thể Con người có nhu cầu truyền thông, cách thể đường truyền quan trọng Trên Internet thông dụng với người, đẹp trang Web phải thể nội dung hình thức Đa phương tiện có nhiều loại, phương tiện công cộng đa phương tiện: Radio, vô tuyến, quảng cáo, phim, ảnh Nhu cầu tương tác người-máy đặt hệ thống thông tin Vấn đề tương tác người-máy không quan hệ người với máy tính mà người với người Con người có vai trò quan trọng hệ thống thông tin Định nghĩa Định nghĩa đa phương tiện (theo nghĩa rộng) bao gồm phương tiện: văn bản, hình vẽ tĩnh (vẽ, chụp), hoạt hình (hình ảnh động), âm Cuối người ta định nghĩa đa phương tiện; đa phương tiện kỹ thuật mô sử dụng đồng thời nhiều dạng phương tiện chuyển hoá thông tin tác phẩm từ kỹ thuật Liên quan đến định nghĩa đa phương tiện, người ta cần lưu ý khía cạnh sau: - Thông tin cần phải số hoá, phù hợp với xu rẻ; - Phải dùng mạng máy tính, để đảm bảo truyền bá, hay truyền tải tốt; - Sử dụng phần mềm có tương tác, cho phép người dùng trao đổi với phần mềm thay đổi theo ý người dùng; - Phải thiết kế giao diện người máy phù hợp với phát triển đa phương tiện, tức giao diện người dùng đa phương tiện lưu ý nhiều năm gần 1.2.3 Thế truyền thông đa phương tiện Kể từ lâu người khám phá thông điệp trở nên tác động (có nghĩa người nghe hiểu nhớ chúng dễ hơn) chúng biểu đạt thông qua kết hợp phương tiện khác Loại kết hợp chình ý nghĩa thuật ngữ truyền thông đa phương tiện Truyền thông đa phương tiện sử dụng nhiều loại phương tiện vào thời điểm Ví dụ: - Giáo viên sử dụng bảng đen lớp học để viết lời giải thìch cho giảng họ - Sử dụng phim ảnh, truyền hính kết hợp nhiều loại phương tiện (âm thanh, video, hoạt ảnh, hính ảnh tĩnh chữ) để tạo nhiều loại thông điệp khác có khả cung cấp thông tin tiêu khiển cho người theo cách thức độc đầy ý nghĩa Thế hệ truyền thông đa phương tiện? Các hệ thống thông tin đa phương tiện dùng nhiều phương tiện giao tiếp khác (văn bản, liệu ghi, liệu số, đồ hoạ, hính ảnh, âm thanh, video ) Nhiều ứng dụng đa phương tiện theo ý nghĩa chúng dùng nhiều dạng Tuy nhiên, thuật ngữ “đa phương tiện” thường dùng để mô tả hệ thống phức tạp hơn, hệ thống hỗ trợ hính ảnh âm Các thông tin chủ yếu tạo bên máy tình Lời nói, nhạc, hính ảnh phim chuyển từ dạng Analog (tương tự) sang Digital (số) trước dùng ứng dụng máy tình Ngược lại, với văn bản, đồ hoạ chì phim hoạt hính tạo máy tình ví đáp ứng mục tiêu định, mở rộng ứng dụng Một hệ máy tình, mạng thông tin hay dụng cụ phần mềm hệ đa phương tiện hỗ trợ ứng dụng tương tác cho ìt dạng thông tin sau, không kể văn đồ hoạ: âm thanh, hính ảnh tĩnh phim video chuyển động 1.3 Hoàn cảnh sử dụng Multimedia Trong nhiều tài liệu quảng cáo, người ta khuyếch trương vai trò đa phương tiện Chính mà người ta xem (i) đa phương tiện thuộc nhiều lĩnh vực; (ii) ngược lại, đa phương tiện khía cạnh riêng, đáng để nghiên cứu Tuy nhiều năm qua, người ta phủ nhận vai trò đa phương tiện, tin tức (i) văn bản; (ii) hình ảnh; (iii) âm thanh; (iv) hình động :  Chương trình video theo yêu cầu VOD;  Trò play điện tử, video;  Giao dịch, thương mại điện tử; Phòng học thiế t bị thực ảo  Thư điện tử cao cấp có kèm hình ảnh âm  Giáo dục từ xa, dạy học với trợ giúp máy tính, dạy qua sóng đài phát TV, mạng máy tính Xu học điện tử nhiều tác giả nhắc đến  Các hoạt động tiến đến quyền điện tử làm việc nhà Vậy, dùng đa phương tiện ứng dụng sau:  Đào tạo máy CBT;  Mô phỏng, ví dụ lái máy bay buồng lái mô phỏng, giải phẫu từ xa;  Hiện thực ảo;  Vui chơi, học sáng tạo;  Thể đa phương tiện, chẳng hạn làm trang WEB theo đặt hàng;  Trò play giải trí  Giáo dục, Y tế, thương mại Một lưu ý triển khai đa phương tiện tác động đa phương tiện, gây nên nhiều thay đổi, đặc biệt : - Thay đổi cấu trúc công nghiệp: Trước cần sản lượng công nghiệp cao, cần chất lượng quan trọng đồng thời quan tâm đến tính thẩm mỹ sản phẩm - Thay đổi cách thức liên kết công việc - Thay đổi cách sống 1.4 Các chuẩn Multimedia thông dụng Định nghĩa ISO: "Chuẩn thoả thuận văn chứa đặc tả kĩ thuật tiêu chí xác khác sử dụng cách thống luật, dẫn, định nghĩa đặc trưng, để đảm bảo vật liệu, sản phẩm, trình, dịch vụ phù hợp với mục đích chúng" Các chuẩn media Các chuẩn media quy định định dạng chuẩn media Đa số chuẩn có nguồn gốc từ World Wide Web Consortium (W3C) Dưới số chuẩn media thông dụng có nguồn gốc tư W3C: - CSS (Cascading Style Sheet):kiểm soát giao diện bên trang HTML XML - DOM (Document Object Model):lập trính trính duyệt trang - HTML (Hypertext Markup Language):tạo trang Web - HTTP (Hypertext Transfer Language):gửi liệu server trính duyệt - MathML (Mathematics Markup Language):hiển thị phương trính toán học - PNG (Portable Network Graphics): dùng cho đồ hoạ điểm - SMIL (Synchronized Multimedia Integration Language):tạo trính bày multimedia - XML (eXtensible Markup Language):tạo ngôn ngữ đánh dấu tuỳ biến Còn số chuẩn media tổ chức khác sau: - GIF (Graphics Interchange Format):dùng cho đồ hoạ điểm CompuServe JPEG (Joint (http://www.jpeg.com Photographic Expert Group):dùng cho - MPEG (Moving Picture Experts Group):phục vụ cho video (http://mpeg.telecomitalialab.com) - vCard dùng cho thẻ thương mại điện tử (http://www.imc.org) 10 ảnh public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceDestroyed(SurfaceHolder holder) { Log.v(TAG, "surfaceDestroyed"); if (recording) { recorder.stop(); recording = false; } recorder.release(); finish(); } } Layout XML: Nội dung AndroidManifest.xml: Như thấy, ứng dụng quay video tùy chỉnh xây dựng không khó khăn xuất số lỗi không ý đến lớp Surface thứ tự bước Ngoài ra, thiết lập linh hoạt thiết lập codec, bitrate format 282 Bài 16: Tạo ứng dụng Video Xây dựng chương trình thực yêu cầu sau: - Cho phép người dùng quay video lưu vào nhớ thiết bị - Load file video từ nhớ thiết bị, hiển thị lên ListView, phát video người dùng chọn ListView - Cho phép người dùng chọn video yêu thích, hiển thị danh sách video yêu thích, phát video chọn từ List - Cho phép xem video online từ youtube 283 Bài 17: Xuất Media sử dụng Webservices 17.1 Web Services Khi nhắc tới tên Google, Bing hay Yahoo, cảm thấy quen thuộc trang web Đối với Web Service, hiểu đơn giản Web Service phương tiện để truy cập vào nội dung dịch vụ cung cấp trang Web Các trang web cho phép nội dung chức trang web nhúng vào ứng dụng bên thứ Chúng ta lấy ví dụ đơn giản trang web Youtube Chúng ta nghiên cứu web Service thông qua JSON REST Tuy nhiên, trước tìm hiểu cách làm việc web service 17.2 HTTP Requests HTTP giao thức sử dụng để truy cập vào web service Android cung cấp lớp HttpClient gói org.apache.http cho phép truy xuất vào ứng dụng webservice từ ứng dụng Android Bước 1: Tạo đối tượng HttpClient, đối tượng DefaultHttpClient tạo nhờ câu lệnh đây: HttpClient httpclient = new DefaultHttpClient(); Bước 2: Ta thiết lập request Trong trường hợp ta thiết lập HTTP GET request, đưa vào tham số URL theo dạng chuỗi truy vấn Điều trái ngược với HTTP POST request, gắn thêm liệu phần thân request message, phần URL Để tạo HTTP GET request, tạo thể hiệncủa đối tượng HttpGet truyền vào URL trang web mà muốn nhận Ví dụ: HttpGet httpget = HttpGet("http://www.apress.com/book/view/9781430232674"); new Sau thực thi request cách truyền đối tượng HttpGet tới đối tượng HttpClient thông qua phương thức execute Phương thức trả đối tượng HttpResponse HttpResponse response = httpclient.execute(httpget); 284 The HttpResponse chứa HttpEntity, which is basically an HTTP message Tất requestsvà responses chứa entities HttpEntity entity = response.getEntity(); phương thức getContent đối tượng HttpEntity trả InputStream cho phép đọc nội dung thực trả InputStream inputstream = entity.getContent(); Dưới ví dụ minh họa package com.apress.proandroidmedia.ch12.simplehttprequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class SimpleHTTPRequest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet("http://www.apress.com/book/view/9781430232674"); try { HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream inputstream = entity.getContent(); BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(inputstream)); StringBuilder stringbuilder = new StringBuilder(); String currentline = null; try { while ((currentline = bufferedreader.readLine()) != null) { stringbuilder.append(currentline + "\n"); } 285 } catch (IOException e) { e.printStackTrace(); } String result = stringbuilder.toString(); Log.v("HTTP REQUEST", result); inputstream.close(); } } catch (Exception e) { e.printStackTrace(); } } } Tất nhiên, phải cần thêm permission kết nối Internet cho ứng dụng manifest: Một cách chung chung, biết cách xử lý yêu cầu HTTP tài nguyên trang web Tiếp theo, xử lý với liệu lấy từ web service 17.3 JSON (JavaScript Object Notation) Ban đầu, JSON ngôn ngữ độc lập sử dụng định dạng liệu trao đổi (data-interchange) Sau người ta thấy JSON có dung lượng nhẹ, nhỏ gọn dễ phân tích, JSON trang web cung cấp truyền liệu thay cho định dang dựa xml khác Android sử dụng JSON thông qua package org.json Ví dụ đối tượng JSON: {"result":{"aname":"value", "anumber":1234, "aboolean":false}} Theo ví dụ ta thấy JSON biểu diễn entire cặp dấu ngoặc nhọn theo cú pháp tên đối tượng đặt cặp dấu nháy kép, dấu hai chấm: {"result":{"Tên":"giá trị", "số":1234, "logic":false}} "result": tất liệu cặp dấu ngoặc nhọn phần đối tượng 286 Mỗi mẫu liệu gán nhãn tương tự theo cua pháp "name": value Cặp dấu nháy kép sử dụng để biểu diễn xâu; số dấu nháy kép, giá trị logic biểu diễn true false; mảng liệu chuỗi đối tượng đặt cặp dấu ngoặc vuông “[” and “]”, phân tách dấu phẩy Đây mảng có tên anarray: {"anarray":[{"arrayelement":"Array Element 1"}, {"arrayelement":"Array Element 2"}]} Mảng có phần tử, phần tử đặt cặp dấu ngoặc nhọn phân tách dấu phẩy; phần tử đối tượng chứa xâu gọi “arrayelement.” Vậy làm để phân tích liệu JSON sử dụng phân tích JSON Android xây dựng sẵn Giả sử có liệu dạng JSON đây: {"results":{"aname":"value", "anumber":1234, "aboolean":false, "anarray": [{"arrayelement":"Array Element 1"}, {"arrayelement":"Array Element 2"}]}} Nó phải chuyển thành String đề làm việc với JSON parser String JSONData = "" + "{\"results\":{\"aname\":\"value\", \"anumber\":1234, \"aboolean\":false, " + "\"anarray\":[{\"arrayelement\":\"Array Element 1\"}, {\"arrayelement\": \"Array Element 2\"}]}}"; Gói JSON có sắn ANdroid chứa lớp JSONObject, Nó khở tạo cách truyền liệu định dạng JSON JSONDataString JSONObject overallJSONObject = new JSONObject(JSONData); Chúng ta có JSONObject, cso thể đưa đối tượng JSON bất kỳ, mảng JSON trường quy mà chứa Từ kết đối tượng JSON nằm bên đối tượng bao bên ngoài, lấy tham chiếu tới phương thức getJSONObject, truyền vào phương thức tên đối tượng mà ta muốn lấy JSONObject resultsObject = overallJSONObject.getJSONObject("results"); 287 Khi ta có đối tượng JSONObject, ta lấy liệu mà chứa Có phương thức khác cho kiểu liệu Để lấy String, ta sử dụng phương thức getString (Tên trường liệu JSON data) Ví dụ: String aname = resultsObject.getString("aname"); Để lấy số nguyên ta sử dụng phương thức getInt(name) Để lấy số thực ta sử dụng phương thức getDouble(name) Để lấy số nguyên dài ta sử dụng phương thức getLong(name) ví dụ: int anumber = resultsObject.getInt("anumber"); Để lấy giá trị logic ta sử dụng phương thức getBolean(name) ví dụ: boolean aboolean = resultsObject.getBoolean("aboolean"); Dữ liệu mẫu có mảng đối tượng JSON bên resultsObject có tên anarray Chúng ta tham chiếu đến mảng đối tượng JSON phương thức getJSONArray("tên mảng") Ví dụ: JSONArray anarray = resultsObject.getJSONArray("anarray"); Ta áp dụng cấu trúc lặp đối tượng JSONArray đưa phần tử JSON riêng biệt nhờ phương thức getJSONObject(chỉ số) Ví dụ: for (int i = 0; i < anarray.length(); i++) { JSONObject arrayElementObject = anarray.getJSONObject(i); String arrayelement = arrayElementObject.getString("arrayelement"); } Đây ví dụ đầy đủ: package com.apress.proandroidmedia.ch12.simplejson; import org.json.JSONArray; 288 import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class SimpleJSON extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String JSONData = "" + "{\"results\":{\"aname\":\"value\", \"anumber\":1234, \"aboolean\":false, " + "\"anarray\":[{\"arrayelement\":\"Array Element 1\"}, {\"arrayelement\":\"Array Element 2\"}]}}"; try { JSONObject overallJSONObject = new JSONObject(JSONData); Log.v("SIMPLEJSON", overallJSONObject.toString()); JSONObject resultsObject = overallJSONObject.getJSONObject("results"); Log.v("SIMPLEJSON", resultsObject.toString()); String aname = resultsObject.getString("aname"); Log.v("SIMPLEJSON", aname); int anumber = resultsObject.getInt("anumber"); Log.v("SIMPLEJSON", "" + anumber); boolean aboolean = resultsObject.getBoolean("aboolean"); Log.v("SIMPLEJSON", "" + aboolean); JSONArray anarray = resultsObject.getJSONArray("anarray"); for (int i = 0; i < anarray.length(); i++) { JSONObject arrayElementObject = anarray.getJSONObject(i); String arrayelement = arrayElementObject.getString("arrayelement"); Log.v("SIMPLEJSON", arrayelement); } } catch (JSONException e) { e.printStackTrace(); } } } 15.4 Pulling Flickr hình ảnh sử dụng JSON Flickr, site chia sẻ video photo phổ biến, có đầy đủ thuộc tính API web service đề nghị JSON định dạng đầu Tương tự nhiều sites để nghị chức thông qua web service APIs, Flickr yêu cầu lập trình viên đăng ký yêu cầu key API Một API key nhận uwgs dụng hệ thống Flickr cho tracked, phát sinh vấn đề 289 Để yêu cầu API key ta phải đăng nhập vào website www.flickr.com/services/apps/create/apply/? trả lời câu hỏi họ Sau hiển thị hình xâu bảo mật key API Ví dụ minh họa sử dụng Flickr API để tìm kiếm ảnh gắn thẻ “waterfront.” Để làm việc chúng sử dụng phương thức flickr.photos.search package com.apress.proandroidmedia.ch12.flickrjson; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class FlickrJSON extends Activity { public static final String API_KEY = "YOUR_API_KEY"; FlickrPhoto[] photos; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); HttpClient httpclient = new DefaultHttpClient(); 290 HttpGet httpget = new HttpGet( "http://api.flickr.com/services/rest/?method=flickr.photos.search& tags = waterfront & format = json & api_key = " + API_KEY + " & per_page = & nojsoncallback = 1"); HttpResponse response; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream inputstream = entity.getContent(); BufferedReader bufferedreader = new BufferedReader( new InputStreamReader(inputstream)); StringBuilder stringbuilder = new StringBuilder(); String currentline = null; try { while ((currentline = bufferedreader.readLine()) != null) { stringbuilder.append(currentline + "\n"); } } catch (IOException e) { e.printStackTrace(); } String result = stringbuilder.toString(); JSONObject thedata = new JSONObject(result); JSONObject thephotosdata = thedata.getJSONObject("photos"); photos = new FlickrPhoto[thephotodata.length()]; for (int i = 0; i < thephotodata.length(); i++) { JSONObject photodata = thephotodata.getJSONObject(i); Log.v("JSON", photodata.getString("id")); photos[i] = new FlickrPhoto(photodata.getString("id"), photodata.getString("owner"), photodata.getString("secret"), photodata.getString("server"), photodata.getString("title"), photodata.getString("farm") ); } inputstream.close(); } } catch (Exception e) { e.printStackTrace(); } ListView listView = (ListView) this.findViewById(R.id.ListView); listView.setAdapter(new FlickrGalleryAdapter(this, photos)); } class FlickrGalleryAdapter extends BaseAdapter { private Context context; private FlickrPhoto[] photos; LayoutInflater inflater; public FlickrGalleryAdapter(Context _context, FlickrPhoto[] _items) { context = _context; photos = _items; inflater = 291 (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { return photos.length; } public Object getItem(int position) { return photos[position]; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View photoRow = inflater.inflate(R.layout.list_item, null); ImageView image = (ImageView) photoRow.findViewById(R.id.ImageView); image.setImageBitmap(imageFromUrl(photos[position].makeURL())); TextView imageTitle = (TextView) photoRow findViewById(R.id.TextView); imageTitle.setText(photos[position].title); return photoRow; } public Bitmap imageFromUrl(String url) { Bitmap bitmapImage; URL imageUrl = null; try { imageUrl = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } try { HttpURLConnection httpConnection = (HttpURLConnection) imageUrl.openConnection(); httpConnection.setDoInput(true); httpConnection.connect(); InputStream is = httpConnection.getInputStream(); bitmapImage = BitmapFactory.decodeStream(is); } catch (IOException e) { e.printStackTrace(); bitmapImage = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); } return bitmapImage; } } class FlickrPhoto { String id; String owner; String secret; String server; String title; String farm; public FlickrPhoto(String _id, String _owner, String _secret, String _server, String _title, String _farm) { id = _id; 292 owner = _owner; secret = _secret; server = _server; title = _title; farm = _farm; } public String makeURL() { return "http://farm" + farm + ".static.flickr.com/" + server + "/" + id + "_" + secret + "_m.jpg"; // http://farm{farm-id}.static.flickr.com/{server-id}/{id}_ {secret}_[mstzb].jpg // From: http://www.flickr.com/services/api/misc.urls.html } } } Main.xml list_item.xml Chú ý: Trong manifest ta yêu cầu quyền truy cập internet cho ứng dụng Kết chạy chương trình 294 TÀI LIỆU THAM KHẢO [1] http://developer.android.com/guide/topics [2] Shawn Van Every, Pro Android Media: Developing Graphics, Music, Video, and Rich Media App for Smartphones and Tablets 295 ... thông đa phương tiện? Các hệ thống thông tin đa phương tiện dùng nhiều phương tiện giao tiếp khác (văn bản, liệu ghi, liệu số, đồ hoạ, hính ảnh, âm thanh, video ) Nhiều ứng dụng đa phương tiện. .. đề nhận thức: (i) Khi dùng đa phương tiện, phần mềm đa phương tiện phần mềm dẫn dắt người dùng nên cần có quan điểm sử dụng đa phương tiện; (ii) Phần mềm đa phương tiện viết tốn kém, nhu cầu... áp dụng công nghệ đa phương tiện, người ta thấy : - Tại nhiều nước khối Asean: có trung tâm đào tạo đa phương tiện, có công ty chuyên đa phương tiện Bên cạnh đài phát truyền hình, đa phương tiện

Ngày đăng: 24/10/2017, 15:51

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w