1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề Tài Xây Dựng Ứng Dụng Android Đọc Báo Mạng Quadịch Vụ Rss

35 0 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

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP THÁI NGUYÊN - BÁO CÁO BÀI TẬP LỚN MƠN HỌC: LẬP TRÌNH TRÊN THIẾT BỊ ANDROID Sinh viên: Trần Quang Hào Giảng viên hướng dẫn: ThS.Đỗ Duy Cốp ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG ANDROID ĐỌC BÁO MẠNG QUA DỊCH VỤ RSS CHƯƠNG 1: GIỚI THIỆU HỆ ĐIỀU HÀNH ANDROID • Giới thiệu hệ điều hành Android Android hệ điu hành dựa nn tảng Linux thiết kế dành cho thiết bị di động có hình cảm ứng điện thoại thơng minh máy tính bảng Ban đầu, Android phát triển Tổng công ty Android, với hỗ trợ tài từ Google sau Google mua lại vào năm 2005 Android mắt vào năm 2007 với tuyên bố thành lập Liên minh thiết bị cầm tay mở: hiệp hội gồm công ty phần cứng, phần mm, viễn thông với mục tiêu đẩy mạnh tiêu chuẩn mở cho thiết bị di động Chiếc điện thoại chạy Android bán vào tháng 10 năm 2008 Android có mã nguồn mở Google phát hành mã nguồn theo giấy phép Apache Chính mã nguồn mở với giấy phép khơng có nhiu ràng buộc cho phép nhà phát triển thiết bị, mạng di động lập trình viên nhiệt huyết điu chỉnh phân phối Android cách tự Ngồi ra, Android cịn có cộng đồng lập trình viên đơng đảo chun viết ứng dụng để mở rộng chức thiết bị, loại ngơn ngữ lập trình Java có sửa đổi Vào tháng 10 năm 2012, có khoảng 700.000 ứng dụng Android, số lượt tải ứng dụng từ Google Play, cửa hàng ứng dụng Android, ước tính khoảng 25 tỷ lượt Những yếu tố giúp Android trở thành nn tảng điện thoại thông minh phổ biến giới, vượt qua Symbian vào quý năm 2010, công ty công nghệ lựa chọn họ cần hệ điu hành khơng nặng n, có khả tinh chỉnh, giá rẻ chạy thiết bị công nghệ cao thay tạo dựng từ đầu Kết thiết kế để chạy điện thoại máy tính bảng, Android xuất TV, máy chơi game thiết bị điện tử khác Bản chất mở Android khích lệ đội ngũ đơng đảo lập trình viên người đam mê sử dụng mã nguồn mở để tạo dự án cộng đồng quản lý Những dự án bổ sung tính cao cấp cho người dùng thích tìm tịi đưa Android vào thiết bị ban đầu chạy hệ điu hành khác Android chiếm 75% thị phần điện thoại thơng minh tồn giới vào thời điểm quý năm 2012, với tổng cộng 500 triệu thiết bị kích hoạt 1,3 triệu lượt kích hoạt ngày Sự thành cơng hệ điu hành khiến trở thành mục tiêu vụ kiện liên quan đến phát minh, góp mặt gọi "cuộc chiến điện thoại thơng minh" cơng ty cơng nghệ [1] • Lịch sử phát triển Tổng công ty Android (Android, Inc.) thành lập Palo Alto, California vào tháng 10 năm 2003 Andy Rubin (đồng sáng lập công ty Danger), Rich Miner (đồng sáng lập Tổng công ty Viễn thơng Wildfire), Nick Sears (từng Phó giám đốc T- Mobile), Chris White (trưởng thiết kế giao diện WebTV) để phát triển, theo lời Rubin, "các thiết bị di động thơng minh biết vị trí sở thích người dùng" Dù người thành lập nhân viên đu người có tiếng tăm, Tổng cơng ty Android hoạt động cách âm thầm, tiết lộ họ làm phần mm dành cho điện thoại di động Trong năm đó, Rubin hết kinh phí Steve Perlman, người bạn thân Rubin, mang cho ông 10.000 USD tin mặt từ chối tham gia vào công ty Google mua lại Tổng công ty Android vào ngày 17 tháng năm 2005, biến thành phận trực thuộc Google Những nhân viên chủ chốt Tổng công ty Android, gồm Rubin, Miner White, tiếp tục lại công ty làm việc sau thương vụ Vào thời điểm khơng có nhiu thơng tin v Tổng cơng ty, nhiu người đồn đốn Google dự tính tham gia thị trường điện thoại di động sau bước Tại Google, nhóm Rubin đứng đầu phát triển nn tảng thiết bị di động phát triển nn nhân Linux Google quảng bá nn tảng cho nhà sản xuất điện thoại nhà mạng với lời hứa cung cấp hệ thống uyển chuyển có khả nâng cấp Google liên hệ với hàng loạt hãng phần cứng đối tác phần mm, bắn tin cho nhà mạng họ sẵn sàng hợp tác với cấp độ khác Ngày nhiu suy đoán Google tham gia thị trường điện thoại di động xuất tháng 12 năm 2006 Tin tức BBC Nhật báo phố Wall thích Google muốn đưa cơng nghệ tìm kiếm ứng dụng họ vào điện thoại di động họ nỗ lực làm việc để thực điu Các phương tiện truyn thông truyn thống lẫn online viết v tin đồn Google phát triển thiết bị cầm tay mang thương hiệu Google Một vài tờ báo cịn nói Google thực mô tả kỹ thuật chi tiết, họ trình diễn sản phẩm mẫu cho nhà sản xuất điện thoại di động nhà mạng Tháng năm 2007, InformationWeek đăng tải nghiên cứu Evalueserve cho biết Google nộp số đơn xin cấp sáng chế lĩnh vực điện thoại di động Ngày tháng 11 năm 2007, Liên minh thiết bị cầm tay mở (Open Handset Alliance), hiệp hội bao gồm nhiu cơng ty có Texas Instruments, Tập đoàn Broadcom, Google, HTC, Intel, LG, Tập đoàn Marvell Technology, Motorola, Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel T-Mobile thành lập với mục đích phát triển tiêu chuẩn mở cho thiết bị di động Cùng ngày, ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss Android cng c mt vi vai trũ l sản phẩm Liên minh, nn tảng thiết bị di động xây dựng nhân Linux phiên 2.6 Chiếc điện thoại chạy Android bán HTC Dream, phát hành ngày 22 tháng 10 năm 2008 Biểu trưng hệ điu hành Android robot màu xanh hãng thiết kế Irina Blok California vẽ Từ năm 2008, Android trải qua nhiu lần cập nhật để cải tiến hệ điu hành, bổ sung tính sửa lỗi lần phát hành trước Mỗi nâng cấp đặt tên theo thứ tự bảng chữ cái, theo tên ăn tráng miệng; ví dụ phiên 1.5 Cupcake (bánh bơng lan nhỏ có kem) tiếp nối phiên 1.6 Donut (bánh vòng) Phiên 9.0 Pie Vào năm 2010, Google mắt loạt thiết bị Nexus-một dòng sản phẩm bao gồm điện thoại thơng minh máy tính bảng chạy hệ điu hành Android, đối tác phần cứng sản xuất HTC hợp tác với Google điện thoại thông minh Nexus đầu tiên, Nexus One Kể từ nhiu thiết bị gia nhập vào dòng sản phẩm này, điện thoại Nexus máy tính bảng Nexus 10, LG Samsung sản xuất Google xem điện thoại máy tính bảng Nexus thiết bị Android chủ lực mình, với tính phần cứng phần mm Android • Giao diện Android Giao diện người dùng Android dựa nguyên tắc tác động trực tiếp, sử dụng cảm ứng chạm tương tự động tác đời thực vuốt, chạm, kéo giãn thu lại để xử lý đối tượng hình Sự phản ứng với tác động người dùng diễn gần lập tức, nhằm tạo giao diện cảm ứng mượt mà, thường dùng tính rung thiết bị để tạo phản hồi rung cho người dùng Những thiết bị phần cứng bên gia tốc kế, quay hồi chuyển cảm biến khoảng cách số ứng dụng sử dụng để phản hồi số hành động khác người dùng, ví dụ điu chỉnh hình từ chế độ hiển thị dọc sang chế độ hiển thị ngang tùy theo vị trí thiết bị, cho phép người dùng lái xe đua xoay thiết bị, giống điu khiển vô- lăng Các thiết bị Android sau khởi động hiển thị hình chính, điểm khởi đầu với thơng tin thiết bị, tương tự khái niệm desktop (bàn làm việc) máy tính để bàn Màn hính Android thường gồm nhiu biểu tượng (icon) tiện ích (widget); biểu tượng ứng dụng mở ứng dụng tương ứng, cịn tiện ích hiển thị nội dung sống động, cập nhật tự động dự báo thời tiết, hộp thư người dùng, mẩu tin thời hình Màn hình gồm nhiu trang xem cách vut trc hoc sau, mc ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss dự giao diện hình Android tùy chỉnh mức cao, cho phép người dùng tự đặt hình dáng hành vi thiết bị theo sở thích Những ứng dụng hãng thứ ba có Google Play kho ứng dụng khác cho phép người dùng thay đổi "chủ đ" hình chính, chí bắt chước hình dáng hệ điu hành khác Windows Phone chẳng hạn Phần lớn nhà sản xuất, số nhà mạng, thực thay đổi hình dáng hành vi thiết bị Android họ để phân biệt với hãng cạnh tranh Hình 1.3.1: Giao diện hình điện thoại hệ điu hành Android 8.0 Ở phía hình trạng thái, hiển thị thơng tin v thiết bị tình trạng kết nối Thanh trạng thái "kéo" xuống để xem hình thơng báo gồm thơng tin quan trọng cập nhật ứng dụng, email hay tin nhắn SMS nhận, mà không làm gián đoạn khiến người dùng cảm thấy bất tiện Trong phiên đời đầu, người dùng nhấn vào thông báo để mở ứng dụng tương ứng, v sau thông tin cập nhật bổ sung theo tính năng, có khả gọi ngược lại có gọi nhỡ mà khơng cần phải mở ứng dụng gọi điện Thông báo ln nằm người dùng đọc xóa • Ứng dụng Android Android có lượng ứng dụng bên thứ ba ngày nhiu, chọn lọc đặt cửa hàng ứng dụng Google Play hay Amazon Appstore để người dùng lấy v, cách tải xuống cài đặt tập tin APK từ trang web khác Các ứng dụng Cửa hàng Play cho phép người dùng duyệt, tải v cập nhật ứng dụng Google nhà phát triển thứ ba phát hành Cửa hàng Play cài đặt sẵn thiết bị thỏa mãn điu kiện tương thích Google Ứng dụng tự động lọc danh sách ứng dụng tương thích với thiết bị người dùng, nhà phát triển giới hạn ứng dụng họ dành cho nhà mạng cố định quốc gia cố định lý kinh doanh Nếu người dùng mua ứng dụng mà họ cảm thấy khơng thích, họ hồn trả tin sau 15 phút kể từ lúc tải v, vài nhà mạng cịn có khả mua giúp ứng dụng Google Play, sau tính tin vào hóa đơn sử dụng hàng tháng người dùng Đến năm 2017, có 3,6 triệu ứng dụng dành cho Android, số lượng ứng dụng tải v từ Cửa hàng Play ước tính đạt 64 tỷ lượt Các ứng dụng cho Android phát triển ngôn ngữ Java sử dụng phát triển phần mm Android (SDK) SDK bao gồm đầy đủ công cụ dùng để phát triển, gồm có cơng cụ gỡ lỗi, thư viện phần mm, giả lập điện thoại dựa QEMU, tài liu hng dn, mó ngun mu, v hng ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss dẫn bước Mơi trường phát triển tích hợp (IDE) hỗ trợ thức Eclipse sử dụng phần bổ sung Android Development Tools (ADT) Các công cụ phát triển khác có sẵn, gồm có Bộ phát triển gốc dành cho ứng dụng phần mở rộng viết C C++, Google App Inventor, môi trường đồ họa cho nhà lập trình bắt đầu, nhiu nn tảng ứng dụng web di động đa nn tảng phong phú • Cộng đồng mã nguồn mở Android có cộng đồng lập trình viên người đam mê động Họ sử dụng mã nguồn Android để phát triển phân phối phiên chỉnh sửa hệ điu hành Các Android cộng đồng phát triển thường đem tính cập nhật vào nhanh kênh thức nhà sản xuất/nhà mạng, khơng kiểm thử kỹ lưỡng khơng có đảm bảo chất lượng; cung cấp hỗ trợ liên tục cho thiết bị cũ khơng cịn nhận cập nhật thức; mang Android vào thiết bị ban đầu chạy hệ điu hành khác, HP Touchpad Các Android cộng đồng thường root sẵn có điu chỉnh khơng phù hợp với người dùng không rành rẽ, khả ép xung tăng/giảm áp xử lý thiết bị CyanogenMod firmware cộng đồng sử dụng phổ biến nhất, hoạt động tổ chức số đông khác Trước đây, nhà sản xuất thiết bị nhà mạng tỏ thiếu thiện chí với việc phát triển firmware bên thứ ba Những nhà sản xuất thể lo ngại thiết bị chạy phần mm khơng thức hoạt động không tốt dẫn đến tốn tin hỗ trợ Hơn nữa, firmware thay đổi CyanogenMod cịn cung cấp tính năng, truyn tải mạng (tethering), mà người dùng bình thường phải trả tin nhà mạng sử dụng Kết nhiu thiết bị bắt đầu đặt hàng rào kỹ thuật khóa bootloader hay hạn chế quyn truy cập root Tuy nhiên, phần mm cộng đồng phát triển ngày trở nên phổ biến, sau thông cáo Thư viện Quốc hội Hoa Kỳ cho phép “jailbreak” (vượt ngục) thiết bị di động, nhà sản xuất nhà mạng tỏ mm mỏng với nhà phát triển thứ ba, chí số hãng HTC, Motorola, Samsung Sony, hỗ trợ khuyến khích phát triển Kết việc nhu cầu tìm hạn chế phần cứng để cài đặt firmware khơng thức bớt ngày nhiu thiết bị phát hành với bootloader mở khóa sẵn mở khóa, tương tự điện thoại dịng Nexus, thông thường họ yêu cầu người dùng từ bỏ chế độ bảo hành họ làm vy Tuy ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss nhiờn, c s chp thun nhà sản xuất, số nhà mạng Mỹ bắt buộc điện thoại phải bị khóa Việc mở khóa “hack” điện thoại thơng minh máy tính bảng tác nhân gây căng thẳng cộng đồng công nghiệp Cộng đồng biện hộ hỗ trợ khơng thức ngày trở nên quan trọng trước việc nn công nghiệp không cung cấp cập nhật thường xuyên và/hoặc ngưng hỗ trợ cho thiết bị họ • Bảo mật tính riêng tư Android Các ứng dụng Android chạy "hộp cát", khu vực riêng rẽ với hệ thống không tiếp cận đến phần lại tài nguyên hệ thống, trừ người dùng trao quyn truy cập cách công khai cài đặt Trước cài đặt ứng dụng, Cửa hàng Play hiển thị tất quyn mà ứng dụng địi hỏi: ví dụ trị chơi cần phải kích hoạt rung lưu liệu vào thẻ nhớ SD, khơng nên cần quyn đọc tin nhắn SMS tiếp cận danh bạ điện thoại Sau xem xét quyn này, người dùng chọn đồng ý từ chối chúng, ứng dụng cài đặt người dùng đồng ý Hệ thống hộp cát hỏi quyn làm giảm bớt ảnh hưởng lỗi bảo mật lỗi chương trình có ứng dụng, bối rối lập trình viên tài liệu hướng dẫn hạn chế dẫn tới ứng dụng hay địi hỏi quyn khơng cần thiết, làm giảm hiệu hệ thống Một số công ty bảo mật, Lookout Mobile Security, AVG Technologies, McAfee, phát hành phần mm diệt virus cho thiết bị Android Phần mm khơng có hiệu chế hộp cát áp dụng vào ứng dụng này, làm hạn chế khả quét sâu vào hệ thống để tìm nguycơ Một nghiên cứu công ty bảo mật Trend Micro liệt kê tình trạng lạm dụng dịch vụ trả tin hình thức phần mm ác ý phổ biến Android, tin nhắn SMS bị gửi từ điện thoại bị nhiễm đến số điện thoại trả tin mà người dùng không h hay biết Loại phần mm ác ý khác hiển thị quảng cáo khơng mong muốn gây khó chịu thiết bị, gửi thông tin cá nhân đến bên thứ ba chưa phép Đe dọa bảo mật Android cho tăng nhanh theo cấp số mũ; nhiên, kỹ sư Google phản bác hiểm họa từ phần mm ác ý virus bị thổi phồng công ty bảo mật nhằm mục đích thương mại, buộc tội ngành cơng nghiệp bảo mật lợi dụng sợ hãi để bán phần mm diệt virus cho người dùng Google giữ quan điểm phần mm ác ý thật nguy hiểm hiếm, điu tra F- Secure thực cho thấy có 0,5% số phần mm ác ý Android len vào cửa hàng Google Play Google sử dụng b quột phn mm ỏc ý Google Bouncer ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss theo dừi v quột cỏc ng dng trờn Ca hàng Google Play Nó đánh dấu phần mm bị nghi ngờ cảnh báo người dùng v vấn đ xảy trước họ tải v máy Android phiên 4.2 Jelly Bean phát hành vào năm 2012 với tính bảo mật cải thiện, bao gồm quét phần mm ác ý cài sẵn hệ thống, hoạt động với Google Play quét ứng dụng cài đặt từ nguồn thứ ba, hệ thống cảnh báo thông báo cho người dùng ứng dụng cố gắng gửi tin nhắn vào số tính tin, chặn tin nhắn lại trừ người dùng cơng khai cho phép Điện thoại thơng minh Android có khả báo cáo vị trí điểm truy cập Wi- Fi, phát việc di chuyển người dùng điện thoại, để xây dựng sở liệu có chứa vị trí hàng trăm triệu điểm truy cập Những sở liệu tạo nên đồ điện tử để tìm vị trí điện thoại thơng minh, cho phép chúng chạy ứng dụng Foursquare, Google Latitude, Facebook Places, gửi đoạn quảng cáo dựa vị trí Phần mm theo dõi bên thứ ba TaintDroid, dự án nghiên cứu trường đại học, đơi biết thông tin cá nhân bị gửi từ ứng dụng đến máy chủ đặt xa Bản chất mã nguồn mở Android cho phép nhà thầu bảo mật lấy thiết bị sẵn có điu chỉnh để sử dụng mức độ bảo mật cao Ví dụ Samsung cộng tác với General Dynamics sau họ thâu tóm Open Kernel Labs để xây dựng lại Jellybean nn vi kiểm soát dành cho dự án "Knox" CHƯƠNG 2: MƠI TRƯỜNG LẬP TRÌNH ANDROID STUDIO • Sơ lược Android Studio Google cung cấp công cụ phát triển ứng dụng Android Website thức dựa nn tảng IntelliJ IDEA gọi Android Studio Android studio dựa vào IntelliJ IDEA, IDE tốt cho Do Android Studio môi trường phát triển ứng dụng tốt cho Android • • Cài đặt Android Studio Yêu cầu phần cứng máy tính • Hệ điều hành Windows • Microsoft® Windows® 7/8/10 (32-bit 64-bit) • RAM tối thiểu GB, khuyến nghị sử dụng RAM GB; cộng GB cho trình giả lập Android • Tối thiểu GB dung lượng đĩa trống, GB đ xuất (500 MB cho IDE + 1.5 GB cho Android SDK v hỡnh nh h thng mụ phng) ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ã phõn gii mn hỡnh ti thiu 1280 x 800 ã H iu hnh MacOS ã Macđ OS X® 10.10 (Yosemite) cao hơn, lên đến 10.13 (macOS High Sierra) • RAM tối thiểu GB, khuyến nghị sử dụng RAM GB; cộng GB cho trình giả lập Android • Tối thiểu GB dung lượng đĩa trống, GB đ xuất (500 MB cho IDE + 1.5 GB cho Android SDK hình ảnh hệ thống mơ phỏng) • Độ phân giải hình tối thiểu 1280 x 800 • Hệ điều hành Linux • Thư viện GNU C (glibc) 2.19 • RAM tối thiểu GB, khuyến nghị sử dụng RAM GB; cộng GB cho Trình giả lập Android • Tối thiểu GB dung lượng đĩa trống, GB đ xuất (500 MB cho IDE + 1.5 GB cho Android SDK hình ảnh hệ thống mơ phỏng) • Độ phân giải hình tối thiểu 1280 x 800 • • • • • Phần mềm Android Studio Vào đường dẫn: “https://developer.android.com/studio/” để download tiến hành cài đặt hình: Hình 2.2.1: Trang download Android Studio Khi cài đặt ý chọn SDK trình giả lập thiết bị android ảo ADV hình: Hình 2.2.2: Giao diện cài đặt SDK AVD Tiếp tục chọn next agree hoàn tất Khi việc cài đặt hoàn tất, hình sau: Hình 2.2.3: Giao diện cửa sổ Android Studio cài đặt hồn tất • Thiết bị ảo Android Studio Máy ảo Android phần khơng thể thiếu lập trình ứng dụng cho hệ điu hành Android, giúp chạy thử ứng dụng máy tính Và công cụ máy ảo tiện dụng Genymotion • Để cài đặt máy ảo Genymotion ta truy cập vào đường dẫn: https://www.genymotion.com/download/ • Ta phải tạo tài khoản đăng nhập vào thấy mục này: Hình 2.2.4: Giao diện download máy ảo Genymotion • Ở ta nên tải phiên with VirtuaBox , chng trỡnh tớch hp ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss sn VirtuaBox cho chỳng ta máy ảo phải có VirtuaBox chạy • • • • • • • • • • Sau cài xong có giao diện sau: Hình 2.2.5: Giao diện Genymotion Ta cần đăng nhập vào tạo máy ảo Các phím chức máy ảo Genymotion • Start: Bắt đầu khởi động máy ảo • Add: Tạo máy ảo • Setting: Cài đặt Nhấn vào Add để tạo máy ảo Hình 2.2.6: Giao diện chọn máy ảo Sau chọn nhiu thiết bị theo ý muốn (như chọn Custom Phone - 5.1.0 - API 22 - 768x1280 ) : • Custom Phone: tên thiết bị máy ảo • 5.1.0: phiên hệ điu hành Android • API: Application Programming Interface (giao diện lập trình ứng dụng) • 768x1280: Độ phân giải hình Bạn chọn thiết bị sau nhấn Next có giao diện thơng tin thiết Hình 2.2.7: Giao diện xem thơng tin máy ảo chọn Sau tiếp tục nhấn Next Finish để hoàn thành cài máy ảo Hình 2.2.8: Giao diện hiển thị thơng tin máy ảo sau tạo Ta tiếp tục nhấn vào thiết bị nhấn Start để khởi động máy ảo Hình 2.2.9: Giao diện hình khởi động khởi động xong máy ảo Genymotion Cấu trúc dự án android studio Tạo Project • Click vào dịng “Start a new Android Studio project” hình sau: Hình 2.3.1: Giao diện cửa sổ chọn Android Studio • Hình 2.3.2: Giao diện tạo project Android Khi xuất hình tạo project Android gồm thành phần sau: • Application Name: Tên ứng dụng muốn đặt • Company Domain: Tên domain cơng ty, thường dùng để kết hợp với tên Application để tạo thành Package (chú ý viết thường hết có dấu chấm) • Package name: Nó tự ng ni ngc Company Domain vi ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss } public String getPubDate() { return pubDate; } public void setPubDate(String pubDate) { this.pubDate = pubDate; } } News.java Các thuộc tính class News gồm: • title: tiêu đ tin tức • link: đường dẫn trang chi tiết tin tức • thumbnail: ảnh tin tức • pubdate: Ngày đăng tin • Bình thường sử dụng ln ArrayAdapter có sẵn, listview hiển thị liệu dạng đoạn text row, row ta có text image view khơng dùng mà phải custom lại để liệu hiển thị được, ta tạo class CustomAdapter: CustomAdapter.java public class CustomAdapter extends ArrayAdapter { Activity context; int resource ; List objects; public CustomAdapter(@NonNull Activity context, int resource, @NonNull List objects) { super(context, resource, objects); this.context = context; this.resource = resource; this.objects = objects; } @ N o n N u ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss l l @ O v e r r i d e public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { LayoutInflater inflater = this.context.getLayoutInflater() ; convertView = inflater.inflate(this.resource, null); ImageView ivThumbnail = convertView.findViewById(R.id.iv_thum bnail); TextView tvTitle = convertView.findViewById(R.id.tv_ title); TextView tvPubDate = convertView.findViewById(R.id.tv_pub Date); News news = this.objects.get(position); tvTitle.setText(Html.fromHtml(news.getTitle())); tvPubDate.setText(Utility.getPeriod(news.getPubD ate())); Picasso.get().load(news.getThumbnail()).into(ivT humbnail); return convertView; } } • Ở class CustomAdaper kế thừa lại thằng ArrayAdapter có kiểu Generic News, nghĩa nhận vào kiểu liệu News thơi Khi bạn kế thừa bắt buộc bạn phải ghi đè @Override constructer là: public CustomAdapter(@NonNull Activity context, int resource, @NonNull List objects) { super(context, resource, objects); this.context = context; this.resource = resource; this.objects = objects; } ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ã @NonNull @Override ã public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { • LayoutInflater inflater = • • • • this.context.getLayoutInflater(); • convertView = inflater.inflate(this.resource, null); TextView tvTitle = convertView.findViewById(R.id.tv_title); ImageView ivThumbnail = convertView.findViewById(R.id.iv_thumbnail); TextView tvPubDate = convertView.findViewById(R.id.tv_pubDate); News news = this.objects.get(position); • tvTitle.setText(Html.fromHtml(news.getTitle())); tvPubDate.setText(Utility.getPeriod(news.getPubDate())); Picasso.get().load(news.getThumbnail()).into(ivThumbnail); return convertView; • } • • Tiếp đến phương thức getView(), phương thức để khởi tạo view để add vào Listview, tạo row listview set liệu News lên row đó, thực chẳng cần hiểu cú pháp cứng cần học thuộc dùng, dùng nhiu lần dẫn đến quen hiểu Vì gọi class CustomAdaper MainActivity ta truyn cho list News nên dịng code có tác dụng lấy đối tượng News tương ứng với view, lấy news có liệu News như: title, link, … liệu set lên row listview • Và cuối return lại converView row mà tạo set liệu lên • Phần quan trọng MainActivity dùng AsyncTask để lấy liệu dịch vụ RSS parse Jsoup • Bây MainActivity.java code sau : • Code AsyncTask để lấy liệu Internet • Parse liệu dạng Document sang ArrayList • Set adapter cho ListView • Khởi tạo lớp kế thừa từ AsyncTask chuyển đường dẫn cung cấp liệu qua dịch vụ RSS để hiển thị lên giao diện ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss MainActivity.java public class MainActivity extends AppCompatActivity { ListView lvNews; CustomAdapter adapter; ArrayList arrNews; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main ); lvNews = findViewById(R.id.lv_news ); MyTask myTask = new MyTask(); myTask.execute("https://www.24h.com.vn/upload/rss/tintuct rongngay.rs s"); } class MyTask extends AsyncTask { @Override protected ArrayList doInBackground(String strings) { arrNews = new ArrayList(); try { Document document = Jsoup.connect(strings[0]).get(); Elements elements = document.select("item"); News news = null; for (Element element : elements) { news = new News(); news.setTitle(element.select("title") text()); news.setThumbnail(Jsoup.parse(element.select("description ").text()) select("img").attr("src")); news.setLink(element.select("link").text()) ; news.setPubDate(element.select("pubDate").tex t()); ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss arrNews.add(news); } } catch (IOExcepti on e) { e.printS tackTrace( ); } return arrNews; } @Override protected void onPostExecute(ArrayList news) { super.onPostExecute(news); adapter = new CustomAdapter(MainActivity.this, R.layout.custom_list_item, arrNews); lvNews.setAdapter(adapter); } } } • • • Như nói Jsoup thư viện Java để cung câp API cho việc trích xuất định dạng XML Có vài phương thức cho việc đọc phân tích XML, trường hợp chúng ta, muốn lấy vài thông tin từ liệu dạng XML server xa phải cung cấp URL Nếu muốn phân tích trang DOM, có: Document document=Jsoup.connect(strings[0]).get(); document biến thuộc class Document để lưu trữ tài liệu lấy v Bây có Document tự trích xuất thơng tin Chúng ta lấy title thông tin khác sử dụng “Tag XML” Cho ví dụ, muốn lấy tất tag có tên “item”: Elements elements=document.select("item"); Ta sử dụng API Jsoup main thread làm gặp phải lỗi nghiệm trọng Android ANR , ví dụ nên sử dụng AsyncTask class MyTask extends AsyncTask { @Override protected ArrayList doInBackground(String strings) { ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss arrNews = new ArrayList(); try { Document document = Jsoup.connect(strings[0]).get(); Elements elements = document.select("item"); News news = null; for (Element element : elements) { news = new News(); news.setTitle(element.select("title").text()); news.setThumbnail(Jsoup.parse(element.select("description").te xt()) select("img").attr("src")); news.setLink(element.select("link").text()); news.setPubDate(element.select("pubDate").text ()); arrNews.add(news); } } catch (IOExcepti on e) { e.printS tackTrace( ); } return arrNews; } @Override protected void onPostExecute(ArrayList news) { super.onPostExecute(news); adapter = new CustomAdapter(MainActivity.this, R.layout.custom_list_item, arrNews); lvNews.setAdapter(adapter); } } • • • MyTask class mở rộng từ AsyncTask cho việc phân tích định dạng XML sử dụng Jsoup Rất dễ dàng có kết sau: Hình 3.2.3: Dữ liệu hiển thị listview lấy từ dịch vụ RSS Để xem trang chi tiết tin tức mà người dùng ấn vào ta phải làm cơng việc sau: • Tạo hình hiển thị trang chi tiết tin tức • Bắt kiện người dùng ấn vào dòng ListView • Sử dụng Intent để truyn liệu từ hình sang hình khác ã Hin th d liu trang web bng WebView ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ã ã to mt mn hỡnh khỏc ta click chuột phải vào tên project chọn: News Acvitiy Empty Activity  Đặt tên DetailAcvitiy -> Finish Sau tạo file DetailActivity.class activity_detail.xml Bước ta bắt kiện cho ListView Hàm onCreate MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvNews = findViewById(R.id.lv_news); MyTask myTask = new MyTask(); myTask.execute("https://www.24h.com.vn/upload/rss/tintuctrongngay.rs s "); lvNews.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, DetailActivity.class); intent.putExtra("link", arrNews.get(position).getLink()); startActivity(intent); } }); } • Trong hàm ta bắt kiện người dùng nhấn vào dòng ListView cách gọi hàm setOnItemCLickListener đối tượng ListView lvNews.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, DetailActivity.class); intent.putExtra("link", arrNews.get(position).getLink()); startActivity(intent); } }); • Trong kiện tạo hàm onItemClick, hàm chạy người dùng ấn dòng ListView tham số có tên position vị trí tin tức ListView người dựng ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ã ã n vo T cỏi v trí ta sử dụng hàm get(vị trí tin tức ListView) đối tượng ArrayList để lấy giá trị link trang web tin tức thông qua hàm getLink() Khi có link trang web tin tức ta việc tạo Intent để truyn liệu link trang web từ hình MainAcvitity sang hình trị chi tiết tin tức DetailActivity activity_detail.xml DetailActivity.java public class DetailActivity extends AppCompatActivity { WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); webView = findViewById(R.id.web_view); Intent intent = getIntent(); String link = intent.getStringExtra("link"); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(link); webView.setWebViewClient(new WebViewClient()); } } • • Intent intent = getIntent(); String link = intent.getStringExtra("link"); • Bên MainAcvittiy gửi cho DetailActivity intent truyn liệu vào intent cách putExtra thỡ bờn DetailActivity nhn c ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss d liu phải getIntent() tiến hành getStringExtra để lấy liệu • Khi nhận giá trị từ MainActivity việc hiển thị trang web lên WebView webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(link); webView.setWebViewClient(new WebViewClient()); • • • Ở ta phải bật JavaScript Cho WebView để thị hết tất có từ trang web họ Để thị trang web lên WebView việc gọi hàm loadUrl truyn vào link mà ta nhận xong Cuối ta gọi hàm setWebViewClient(new WebViewClient()) để load trang web tin tức nằm gọn ứng dụng ta không bật trình duyệt để hiển thị lên Hình 3.2.4: Trang hiển thị chi tiết tin tức CHƯƠNG 4: CHƯƠNG TRÌNH THỰC NGHIỆM • Phát biểu tốn Ngày nay, vai trò ứng dụng đọc tin tức thiết bị di động ngày trở nên quan trọng Khác với báo trí truyn thơng có giới hạn cập nhật tin tức, tờ báo trực tuyến cung cấp tiện lợi việc cập nhật phát hành thơng tin V phía người dùng, họ xem thông tin lúc nơi với thiết bị di động V phía người cung cấp thơng tin, họ dễ dàng cập nhật tin tức nhất, thời thông qua dịch vụ cung cấp thông tin đơn giản RSS (Really Simple Syndication) Do việc sử dụng ứng dụng đọc tin tức điu cần thiết nay, nhằm đáp ứng nhu cầu cập nhật thông tin người • Mơ hình chức Ứng dụng Xem tin tức L ưu tn tức Chia sẻ tin tức Đánh giá ứng dụng Gửi email góp ý ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ã Xem tc tc: ng dng cho phộp người dùng chọn tin để xem chi tiết nội dung tin tức • Lưu tin tức: lưu tin mà người dùng muốn để sau đọc, tin tức mà người dùng xem vào nhớ • Chia sẻ tin tức: ứng dụng tích hợp nút chia sẻ để người dùng thuận tiện việc chia sẻ tin tức lên mạng xã hội, gmail, tin nhắn, vv… • Đánh giá ứng dụng: đánh giá ứng dụng sau người dùng cài đặt sử dụng ứng dụng • Gửi email góp ý: người dùng muốn đóng góp ý kiến v ứng dụng gửi email đến nhà phát triển • Mơ hình hoạt động Các bước hoạt động: • Bước 1: Ứng dụng gọi tới dịch vụ RSS thơng qua đường dẫn • Bước 2: Dịch vụ RSS gửi yêu cầu từ client v cho sở liệu xử lý • Bước 3: Cơ sở liệu truy vấn liệu trả v kết sau xử lý xong v cho dịch vụ RSS • Bước 4: Dịch vụ RSS trả v nội dung tin tức dạng XML cho ứng dụng để bọc tách liệu hiển thị lên hình • Giao diện ứng dụng • Giao diện hình hiển thị danh sách tin tức thể loại Hình 4.4.1: Giao diện hình • • Là chương trình lấy liệu internet lên phần kiểm tra kết nối internet thiết bị vơ quan trọng Hình 4.4.2: Màn hình hiển thị thiết bị khơng kết nối internet Người dùng xem thể loại tin tức khác cách chọn vào tên thể loại vut sang ngang ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss Hỡnh 4.4.3: Giao din mn hình thể loại tin ngày Hình 4.4.4: Giao diện mn hỡnh th loi tin th gii ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss Hỡnh 4.4.5: Giao diện hình thể loại tin thể thao Hình 4.4.6: Giao diện hình thể loại Hình 4.4.7: Giao diện hình thể loại tin giáo dục Hình 4.4.8: Giao diện hình thể loại tin thời trang tin gii trớ ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss Hỡnh 4.4.9: Giao din mn hình thể loại tin sức khỏe • Hình 4.4.10: Giao diện hình thể loại tin du lịch Khi người dùng chọn tin tức muốn đọc hình ứng dụng chuyển đến hình hiển thị chi tiết tin tức Hình 4.4.11: Giao diện hình chi tiết tin tức • Để chia sẻ tin tức với ứng dụng khác người dùng chọn vào nút phía giao diện hình chi tiết tin tức Hình 4.4.12: Giao diện cửa sổ chia sẻ tin tức với ứng dụng khác • Người dùng muốn lưu tin tức yêu thích để xem lại sau chọn phía giao diện hình chi tiết tin tức Để xóa tin lưu người dùng chọn nút lại nút ln na ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss Hỡnh 4.4.13: Thụng bỏo hin th lưu tin thành cơng • • Hình 4.4.14: Thơng báo hiển thị xóa tin lưu thành cơng Khi người dùng chọn vào biểu tượng hình xuất menu hiển thị tính hữu ích có ứng dụng Hình 4.4.15: Menu hiển thị tính ứng dụng Khi muốn xem tin tức mà người dùng lưu chọn mục Tin lưu menu Hình 4.4.16: Giao diện hình tin lưu • Nếu người dùng muốn xóa tin lưu danh sách tin tức cần nhấn giữ dòng tin muốn xóa khoảng 1,5 giây xuất thơng báo hình đây: Hình 4.4.17: Giao diện cửa sổ thơng báo xác nhận xóa tin chọn • Để xem danh sách tin tức người dùng xem chọn mục Tin đọc menu Hình 4.4.18: Giao diện hình tin đọc • Người dùng muốn xóa tất tin tức đọc ấn nút • phía giao diện hình Lúc xuất thơng báo để xác nhận xem người dùng có muốn xóa tất hay khơng Hình 4.4.19: Giao diện cửa sổ thơng báo xác nhận xóa tất tin đọc ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss ãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rssãỏằã.ti.xÂy.dỏằng.ỏằâng.dỏằƠng.android.ỏằãc.bĂo.mỏĂng.quadỏằch.vỏằƠ.rss

Ngày đăng: 14/10/2023, 16:14

Xem thêm:

w