6. Bố cục đề tài
2.3. THIẾT KẾ HỆ THỐNG
2.3.1.Sơ đồ tổng quan hệ thống
2.3.2. Usecase
2.3.2.1. Sơ đồ Usecase
Hình 2.8. Sơ đồ Usecase 2.3.2.2. Đặc tả Usecase
Bảng 2.1 Đặc tả Usecase “Kiểm tra tin mới”
Tóm tắt:
Cho phép người sử dụng kiểm tra danh mục tin có tin mới hay không. Dòng sự kiện chính:
1.Người sử dụng phải vào danh sách tin. 2.Nhấn giữ và kéo xuống dưới màn hình.
3.Ứng dụng sẽ hiện thông báo là đang kiểm tra tin.
Tin sẽ được thêm vào cơ sở dữ liệu
Tạo thông báo Notification Dòng sự kiện phụ: (Không có) Yêu cầu đặc biệt:
- Phải vào chức năng danh sách tin trước Tiền điều kiện: (Không có)
Hậu điều kiện:
- Ứng dụng sẽ kiểm tra có tin mới hay không Điểm mở rộng: (Không có)
- Đặc tả Usecase “Đăng ký chuyên mục”
Bảng 2.2. Đặc tả Usecase “Đăng ký chuyên mục”
Tóm tắt:
Cho phép người sử dụng đăng ký nhận tin tự động theo chuyên mục. Dòng sự kiện chính:
1. Người sử dụng phải vào chức năng “Đăng ký” ở menu.
2. Nhấn chọn vào checkbox những mục muốn nhận tin, bỏ chọn ở những mục không muốn nhận tin.
3. Hệ thống sẽ cập nhật trạng thái cho từng chuyên mục là có nhận tin hay không.
Dòng sự kiện phụ: (Không có) Yêu cầu đặc biệt:(Không có) Tiền điều kiện: (Không có) Hậu điều kiện:
- Trạng thái các danh mục được đăng ký nhận tin Điểm mở rộng: (Không có)
Bảng 2.3. Đặc tả Usecase “Xem danh sách tin”
Tóm tắt:
Cho phép người sử dụng có thể xem danh sách tin tức của một chuyên mục Dòng sự kiện chính:
1. Người sử dụng phải vào ứng dụng.
2. Mặc định danh sách tin được hiện ra. Hoặc có thể vào menu chọn Dòng sự kiện phụ: (Không có)
Yêu cầu đặc biệt:
-Phải vào ứng dụng trước Tiền điều kiện: (Không có) Hậu điều kiện: (Không có) Điểm mở rộng: (Không có)
- Đặc tả Usecase “Cài đặt”
Bảng 2.4. Đặc tả Usecase “Cài đặt”
Tóm tắt:
Cho phép người sử dụng có cài đặt nhận tin Dòng sự kiện chính:
1. Người sử dụng phải vào cài đặt
2. Tùy chọn cài số tin nhận, tối đa 150 tin
3. Tùy chọn cài số ngày nhận tin, tối đa 30 ngày 4. Sau khi thay đổi giá trị, giá trị tự động lưu lại Dòng sự kiện phụ: (Không có)
Yêu cầu đặc biệt:
-Phải vào menu để vào chức năng cài đặt tin Tiền điều kiện:
-Vào danh sách menu Hậu điều kiện:
-Nội dung tin được hiển thị ra màn hình Điểm mở rộng:(Không có)
2.3.3.Sơ đồ tuần tự
2.3.3.1. Chức năng đọc tin
Hình 2.9. Sơ đồ tuần tự chức năng đọc tin 2.3.3.2. Chức năng kiểm tra tin mới
2.3.3.3. Chức năng đăng ký chuyên mục
Hình 2.11. Sơ đồ tuần tự chức năng đăng ký chuyên mục 2.3.3.4. Chức năng cài đặt
2.3.4.Thiết kế cơ sở dữ liệu
- Bảng dữ liệu mặc định phải tồn tại trong một cơ sở dữ liệu.
Bảng 2.5. Thông tin bảng “android_metadata”
Tính chất Tên trường
Kiểu dữ
liệu Chú thích
locale Text Trường có giá trị mặc định là “en_US”
- Bảng dữ liệu “Category” chứa thông tin chuyên mục.
Bảng 2.6. Thông tin bảng “category”
Tính chất Tên trường Kiểu dữ
liệu Chú thích
Khóa Id Integer ID của chuyên mục Name Text Tên của chuyên mục
Idrss Integer
IDRSS của mỗi RSS(Nghĩa là trong một link RSS có chứa nhiều tin của R)
Parent Integer
Xác định được chuyên mục cha và chuyên mục con, chuyên mục cha có Parent bằng 0
Rss Text Chứa địa chỉ liên kết đến RSS của chuyên mục
Image Text Hình ảnh của chuyên mục
Getnews Integer Trạng thái đăng ký nhận tin của chuyên mục.(1 là nhân tin, 0 là không nhận tin)
- Bảng dữ liệu “News” chứa thông tin tin.
Bảng 2.7. Thông tin bảng “news”
Tính chất Tên trường
Kiểu
dữ liệu Chú thích
Khóa Id Integer Mã tin
Tham chiếu từ
bảng category Idrss Integer Mã chuyên mục của tin Link Text Địa chỉ lien kết của tin Title Text Tiêu đề tin
Discription Text Mô tả ngắn của tin Content Text Nội dung của tin
Image Text Địa chỉ liên kết hình đại diện của tin Pubdate Text Ngày đăng của tin
Isread Integer
Chứa trạng thái của tin(0 là tin chưa được đọc, 1 là tin đã được đọc, 2 là tin lần cuối cùng tải về và chưa đợc đọc)
2.3.5. Sơ đồ lớp
2.3.6. Sơ đồ quan hệ giữa các bảng
CHƯƠNG 3
THỬ NGHIỆM CHƯƠNG TRÌNH
3.1. ỨNG DỤNG
3.1.1. Màn hình chính
Màn hình chính là chức năng danh sách các tin. Trong danh sách này với mỗi mục bên trái là tên của chuyên mục tin. Phần bên phải gồm 3 số cách nhau bởi một dấu xuyệt, số thứ nhất là số tin chưa đọc của lần cập nhật sau cùng, số thứ hai là tổng số tin chưa đọc và số cuối cùng là tổng số tin của chuyên mục.
Hình 3.1. Giao diện màn hình chính
3.1.2. Danh sách tin
Danh sách tin là chức năng chứa toàn bộ tin của một chuyên mục cụ thể. Danh sách tin được hiển thị với một hình mô tả bên trái và tiêu đề tin ở bên phải.
Hình 3.2. Danh sách tin
Trong danh sách đọc tin còn có các chức năng lọc tin theo chuyên mục và lọc tin theo trạng thái tin đã đọc, chưa đọc và tất cả tin.
Hình 3.3. Các chức năng lọc tin
3.1.3. Đọc tin chi tiết
Với tin đã được đọc thì màu sác sẽ được tô đậm hơn những tin bình thường. Việc làm này giúp người sử dụng phân biệt được tin nào đã đọc hoặc chưa đọc một cách dễ dàng.
Hình 3.4. Phân biệt tin đã đọc hoặc chưa đọc
Khi nhấn chọn vào một tin trong danh sách tin màn hình đọc tin chi tiết sẽ xuất hiện. Tin bài sẽ được tải về và hiển thị trên màn hình.
Hình 3.5. Chức năng đọc tin chi tiết
Khi tin được tải về hoàn tất, người sử dụng có thể chia sẽ tin nếu muốn. Tin có thể được chia sẻ ở phần tin nhắn, ghi chú hoặc ở các mạng xã hội.
Hình 3.6. Chức năng chia sẻ tin
Cài đặt nhận tin
Với màn hình chức năng cài đặt người sử dụng có thể cài đặt số tin tối đa một lần tải về và số ngày tối đa của tin tải về. Việc thay đổi giá trị của từng thanh giá trị tương ứng với việc thay đổi giá trị của cài đặt, giá trị được tự động lưu khi có sự thay đổi.
3.2 KIỂM NGHIỆM THỰC TẾ
3.2.1. Đưa ứng dụng lên Google Play
Sau quá trình thiết kế và xây dựng ứng dụng được đưa lên chạy thử nghiệm tạo ứng dụng Google Play với tên gọi “DUEd News” tại địa chỉ https://play.google.com/store/apps/details?id=it.ued.uedtintuc.
Hình 3.8. Ứng dụng tại Google Play.
Việc đưa ứng dụng lên Google Play được bắt đầu từ ngày 25 tháng 01 năm 2015 với phiên bản đầu tiên 1.0. Lần cập nhật sau cùng làm ngày 08 tháng 05 năm 2015 với phiên bản 2.8515. Qua những lần cập nhật, ứng dụng được bổ sung tính năng mới, cải thiện độ thân thiện và ổn định.
3.2.2. Thống kê đạt được
Sau thời gian đưa ứng dụng lên kho ứng dụng Google Play. Thông kê lấy từ tài khoản quản lý ứng dụng cho thấy ứng dụng đã đạt được một số mốc nhất định như sau:
Tổng số lượt cài đặt là 18 trên tổng số 17 dòng thiết bị. Các thiết bị đến từ các hảng sản xuất điện thoại di động tiêu biển là Samsung, Asus, Sony và Pantech.
Hình 3.9. Tên và số lượng một số thiết bị cài đặt ứng dụng
Trên lượt cài đặt hiện có thì phiên bản hệ điều hành Android 4.4 có 7 thiết bị cài đặt chiếm 38.89% tổng số thiết bị đã cài đặt ứng dụng. Đứng thứ 2 về lượt cài đặt là phiên bản Android 4.0.3 – 4.0.4 có 5 lượt cài đặt chiếm 27.78%. Phiên bản Android 4.1 và Android 4.0 chiếm 11.11%.
Hình 3.10. Lượt cài đặt trên phiên bản hệ điều hành tính đến 07/05/2015
Thống kê lượt cài đặt trên mạng di động cho thấy chỉ có 12 thiết bị được cài đặt có sử dụng mạng di động tại Việt Nam chiếm 61.67%. Còn lại các lượt cài đặt đến từ các mạng di động ngoài Việt Nam.
Hình 3.11. Lượt cài đặt trên nhà mạng di động tính đến 07/05/2015
Ứng dụng nhận được đánh giá trung bình 5.00 / 5.00 của 4 lượt đánh giá.
KẾT LUẬN VÀ KIẾN NGHỊ
KẾT QUẢ ĐẠT ĐƯỢC
Trong quá trình nghiên cứu và thực hiện đề tài khóa luận em đã tìm hiểu và nắm được một số vấn đề:
1.Về lý thuyết
a. Cũng cố kiến thức lập trình và các môn học liên quan.
b. Tìm hiểm được tảng phần mềm Android, cách xây dựng một ứng dụng trên điện thoại Android nói chung và một ứng dụng sử dụng internet nói riêng.
c. Bên cạnh đó, để xây dựng được ứng dụng này thì em cũng đã phải nghiên cứu và hiểu thêm nhiều công nghệ liên quan như XML, Web service, JSON, SQLite, GCM…
2.Về chương trình
a. Đề tài hoàn thành và cơ bản đạt được những yêu cầu đề tài. b. Ứng dụng hoạt động tương đối ổn đinh.
c. Tiết kiệm tối đa lưu lượng truy cập internet
d. Giao diện thân thiện, hiệu ứng bắt mắt, dễ dàng sử dụng dù là người tiếp cận lần đầu tiên.
e. Đã đưa ứng dụng lên kho ứng dụng Google Play.
HẠN CHẾ
Bên cạnh những kết quả đạt được trên, em vẫn còn nhiều hạn chế trong quá trình thực hiện khóa luận.
HƯỚNG PHÁT TRIỂN
Để phục vụ nhu cầu sử dụng của đông đảo sinh viên và du học sinh đến học tại trường. Hướng phát triển tiếp theo của đề tài là ứng dụng hổ trợ đa ngôn ngữ (tiếng Lào, tiếng Trung Quốc, tiếng Anh).
Cải thiện độ ổn định của ứng dụng, giảm thiểu lỗi phát sinh do quá trình sử dụng ứng dụng.
Cải thiện giao diện đẹp mắt và hiệu quả hơn, hổ trợ giao diện cho các thiết bị máy tính bảng tốt hơn .
TÀI LIỆU THAM KHẢO
[1] Google Buys Android for Its Mobile Arsenal. Bloomberg Businessweek. Bloomberg, truy cập ngày 02 tháng 05 năm 2015, <http://www.webcitation.org/5wk7sIvVb>
[2] Industry Leaders Announce Open Platform for Mobile Devices, Open Handset Alliance truy cập ngày 02 tháng 05 năm 2015
<http://www.openhandsetalliance.com/press_110507.html>
[3] T-Mobile G1 Spec. Infosite and comparisons. GSM Arena, truy cập ngày 02 tháng 05 năm 2015 < http://www.gsmarena.com/t_mobile_g1- 2533.php>
[4] Google Cloud Messaging for Android, ngày truy cập 02 tháng 05 năm 2015 <https://developer.android.com/google/gcm/index.html>
[5]Parse Documentation, ngày truy cập 02 tháng 05 năm 2015 <https://parse.com/docs>
PHỤ LỤC
Phụ lục 1: Mã nguồn hàm gửi push từ server chạy php
function guiThongBao_Android_GCM($registatoin_ids) { //mã api key của google app đăng ký GCM $GOOGLE_API_KEY=
"AIzaSyDfyFmV3IeB2HiHueSL3dmcAA6eUHw_6Tk";
//link server google nhận nội dung cần thông báo đến thiết bị
$url= 'https://android.googleapis.com/gcm/send'; // nội dung message
$message=
'{"registration_ids":["'.$registatoin_ids.'"],"data": {"where": {"deviceType": "android"},"data": {"message": "news","action": "ACTIONTION"}}}';
//khởi tạo header $headers = array(
'Authorization: key=' .$GOOGLE_API_KEY , 'Content-Type: application/json'
);
// mở kết nối curl $ch = curl_init();
// set nơi truy vấn
curl_setopt($ch, CURLOPT_URL, $url); // set kiểu POST
curl_setopt($ch, CURLOPT_POST, true); // set header curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); // nhận giá trị trả về curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); // Tắt kiểm tra SSL curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); // thiết lập
curl_setopt($ch,CURLOPT_POSTFIELDS, $message); // thực thi
$result = curl_exec($ch); if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch)); } // đóng kết nối curl_close($ch); // xuất dữ liệu ra màn hình echo $result; }
Phụ lục 2: Mã nguồn file PushNotification.java chụi trách nhiệm nhận push notification
public class PushNotification extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
JSONObject json = new
JSONObject(intent.getExtras().getString(CommonUtilities.
PARSE_PACKAGE_NAME));
String message = json.getString("message");
try{
int contentid = json.getInt("content- id");
String alert = json.getString("alert");
if ("news".equals(message)) { new XmlParser(context, String.valueOf(contentid+1),alert);
}
}catch(NumberFormatException ex){ System.out.println(ex);
try{
String link = json.getString("link"); if ("update".equals(message)) {
generateNotificationUpdate(context, "Có phiên bản update!",link);
} else if ("".equals(message)){
}
}catch(NumberFormatException ex){ System.out.println(ex);
}
} catch (JSONException e) { }
} }
Phụ lục 3: Nội dung file AndroidManifest.xml của ứng dụng
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/androi d" package="it.ued.uedtintuc" android:versionCode="12" android:versionName="2.30315" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.android.launcher.permission.INSTALL_SH ORTCUT" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE " /> <permission android:name="it.ued.uedtintuc.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="it.ued.uedtintuc.permission.C2D_MESSAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="com.sec.android.provider.badge.permission. READ" /> <uses-permission android:name="com.sec.android.provider.badge.permission. WRITE" /> <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST _BADGE" /> <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCU T" /> <application android:name="it.ued.uedtintuc.ParseApplication" android:allowBackup="true" android:icon="@drawable/logo" android:label="@string/app_name" android:theme="@style/AppTheme" >
<!-- Cấu hình APPID Google app (GCM) --> <meta-data android:name="com.parse.push.gcm_sender_id" android:value="id:776741724278" /> <activity android:name="it.ued.uedtintuc.SplashScreen" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="it.ued.uedtintuc.MainActivity" android:label="@string/app_name" > </activity> <!-- Màn hình webpage Activity --> <activity android:name="it.ued.uedtintuc.DisPlayWebPageActivity" android:configChanges="keyboardHidden|orientation" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="it.ued.uedtintuc.TinDaNhanActivity" /> </activity> <!-- Màn hình cài đặt --> <activity android:name="it.ued.uedtintuc.CaiDatActivity" android:label="@string/action_settings" > </activity> <activity android:name="it.ued.uedtintuc.TinDaNhanActivity"
android:label="@string/title_activity_tin_da_nhan" > <meta-data android:name="android.app.default_searchable" android:value=".SearchResultsActivity" /> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="it.ued.uedtintuc.MainActivity" /> </activity> <activity android:name="it.ued.uedtintuc.SearchResultsActivity" android:label="@string/action_settings" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="it.ued.uedtintuc.TinDaNhanActivity" /> </activity>
<!-- Bắt đầu - Cấu hình Parse và GCM -->
<service android:name="com.parse.PushService" /> <receiver android:name="com.parse.ParseBroadcastReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_PRESENT" /> </intent-filter> </receiver>
<receiver android:name="com.parse.ParsePushBroadcastReceiver" android:exported="false" > <intent-filter> <action android:name="com.parse.push.intent.RECEIVE" /> <action android:name="com.parse.push.intent.DELETE" /> <action android:name="com.parse.push.intent.OPEN" /> </intent-filter> </receiver> <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.S END" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATIO N" /> <!-- IMPORTANT: Change
"com.parse.starter" to match your app's package name. -- > <category android:name="it.ued.uedtintuc" /> </intent-filter> </receiver> <receiver android:name="it.ued.uedtintuc.PushNotification" android:exported="false" > <intent-filter>
<action android:name="ACTIONTION" /> </intent-filter>
</receiver> <activity
android:name="it.ued.uedtintuc.HuongDanActivity" android:theme="@android:style/Theme.Holo.NoActionBar" > </activity> </application> </manifest>
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... Đà Nẵng, ngày … tháng 05 năm 2015 Chữ ký GVHD