Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 63 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
63
Dung lượng
893,17 KB
Nội dung
MỤC LỤC CHƢƠNG GIỚI THIỆU HỆ ĐIỀU HÀNH ANDROID 1.1 Lịch sử Hệ điều hành ANDROID 1.2 DELVING với máy ảo DALVIK 1.3 Kiến trúc ANDROID 1.3.1 Tầng ứng dụng 1.3.2 Application framework .3 1.3.3 Library 1.3.4 Android Runtime 1.3.5 Linux kernel 1.4 ANDROID EMULATOR CHƢƠNG PHÁT TRIỂN ỨNG DỤNG TRÊN ANDROID 2.1 Các thành phần ANDROID PROJECT 2.1.1 AndroidManifest.xml .7 2.1.2 File R.java 2.2.Chu kỳ ứng dụng ANDROID 10 2.2.1 Chu kỳ sống thành phần 10 2.2.2 Activity Stack 11 2.2.3 Các trạng thái chu kỳ sống .12 Hình 2.3 Chu kỳ sống activity 12 2.2.4 Chu kỳ sống ứng dụng .12 2.2.5 Các kiện chu kỳ sống ứng dụng 13 2.2.6 Thời gian sống ứng dụng 13 2.2.7 Thời gian hiển thị Activity .13 2.2.8 Các phƣơng thức chu kỳ sống 14 2.3.Các thành phần giao diện ANDROID 15 2.3.1 View 15 2.3.2 ViewGroup .16 2.3.3 LinearLayout 16 2.3.3.1 FrameLayout 16 2.3.3.2 AbsoluteLayout 17 2.3.3.3 RetaliveLayout 17 2.3.3.4 TableLayout 18 2.3.4 Button .18 2.3.5 ImageButton 19 2.3.6 ImageView 20 2.3.7 ListView 20 2.3.8 TextView 21 2.3.9 EditText 22 2.3.10 CheckBox .22 2.3.11 MenuOptions 22 2.3.12 ContextMenu 24 2.3.13 Quick Search Box 25 2.3.14 Activity & Intend 26 2.3.14.1 Activity 26 2.3.14.2 Intent 27 -Khái niệm Intend: 27 2.4.CONTENT PROVIDER URI 29 2.5 BACKGROUND SERVICE 30 2.6 TELEPHONY 33 2.7.SQLITE 34 2.8 ANDROID & WEBSERVICE 35 2.8.1 Khái niệm Web service SOAP 35 2.8.2 Giới thiệu XStream 35 2.8.3 Thao tác với web service Android 38 CHƢƠNG PHÁT TRIỂN ỨNG DỤNG TỪ ĐIỂN ANH -VIỆT 41 3.1 Mô tả ứng dụng từ điển .41 3.2 Các lớp xử lý 41 3.2.1 Lớp database từ điển 41 3.2.2 Lớp kiểm soát tra cứu 41 3.2.3 Lớp hiển thị kết 42 3.2.4 Lớp tra từ 42 3.3 Đặc tả lớp thƣ viện .42 3.3.1 Lớp DictionaryDatabase 42 3.3.2 Lớp DictionaryProvider 45 3.3.3 Lớp SearchableDictionary 49 3.3.4 Lớp WordActivity 52 3.4 Đặc tả lớp giao diện ứng dụng .53 3.4.1 Giao diện 53 3.4.2 Giao diện tra từ 55 3.4.3 Giao diện kết .56 KẾT LUẬN .58 LỜI CẢM ƠN Em xin bày tỏ lòng biết ơn sâu sắc tới thầy giáo ThS.Trần Ngọc Thái, thầy tận tình hƣớng dẫn giúp đỡ em suốt trình làm tốt nghiệp Với bảo thầy, em có định hƣớng tốt việc triển khai thực yêu cầu trình làm đồ án tốt nghiệp Em xin chân thành cảm ơn dạy bảo giúp đỡ thầy giáo, cô giáo Khoa Công Nghệ Thông Tin – Trƣờng Đại Học Dân Lập Hải Phòng trang bị cho em kiến thức để em hoàn thành tốt báo cáo tốt nghiệp Xin cảm ơn tới ngƣời thân gia đình quan tâm,động viên suốt trình học tập làm tốt nghiệp Xin gửi lời cảm ơn tới tất bạn bè, đặc biệt bạn lớp CT1102 giúp đỡ đóng góp ý kiến để hoàn thành chƣơng trình Em xin trân thành cảm ơn! Hải Phòng,ngày 24 tháng 12 năm 2012 Sinh viên Phạm Hùng Nam CHƢƠNG GIỚI THIỆU HỆ ĐIỀU HÀNH ANDROID 1.1 Lịch sử Hệ điều hành ANDROID Ban đầu, Android hệ điều hành cho thiết bị cầm tay dựa lõi Linux công ty Android Inc.(California, Mỹ) thiết kế.Công ty sau đƣợc Google mua lại vào năm 2005 bắt đầu xây dựng Android Platform Các thành viên chủ chốt Android Inc gồm có: Andy Rubin, Rich Miner, Nick Sears, and Chris White Hình 1.1 Android timeline Và sau tiếp, vào cuối năm 2007, thuộc Liên minh Thiết bị cầm tay Mã Nguồn mở(Open Handset Alliance) gồm thành viên bật ngành viễn thong thiết bị cầm tay nhƣ: TexasInstruments,BroadcomCorporation,Google,HTC,Intel,LG,Marvell,Techn ologyGroup,Motorola,Nvidia,Qualcomm,SamsungElectronics,Sprint Nextel,TMobile,ARM Holdings,Atheros Communications,Asustek Computer Inc,Garmin Ltd,Softbank,Sony Ericsson,ToshibaCorp,and Vodafone Group Mục tiêu liên minh nhanh chóng đổi để đáp ứng tốt cho nhu cầu ngƣời tiêu dùng kết tảng Android Android đƣợc thiết kế để phục vụ nhu cầu nhà sản xuất thiết, nhà khai thác lập trình viên thiết bị cầm tay Phiên SDK lần phát hành vào tháng 11 năm 2007, hãng T-Mobile công bố điện thoại Android T-Mobile G1, smartphone dựa tảng Android Một vài ngày sau đó, Google lại tiếp tục công bố mắt phiên Android SDK release Candidate 1.0 Trong tháng 10 năm 2008, Google đƣợc cấp giấy phép mã nguồn mở cho Android Platform Khi Android đƣợc phát hành số mục tiêu kiến trúc cho phép ứng dụng tƣơng tác đƣợc với sử dụng lại thành phần từ ứng dụng khác.Việc tái sử dụng không đƣợc áp dụng cho cho dịch vụ mà đƣợc áp dụng cho thành phần liệu giao diện ngƣời dùng Vào cuối năm 2008, Google cho phát hành thiết bị cầm tay đƣợc gọi Android Dev Phone chạy đƣợc ứng dụng Android mà không bị ràng buộc vào nhà cung cấp mạng điện thoại di động Mục tiêu thiết bị cho phép nhà phát triển thực thí nghiệm thiết bị thực chạy hệ điều hành Android mà ký hợp đồng nào.Vào khoảng thời gian Google cho phát hành phiên vá lỗi 1.1 hệ điều hành Ở hai phiên 1.0 1.1 Android chƣa hỗ trợ soft-keyboard mà đòi hỏi thiết bị phải sử dụng bàn phím vật lý.Android cố định vấn đề cách phát hành SDK 1.5 vào tháng Tƣ năm 2009, với số tính khác.Chẳng hạn nhƣ nâng cao khả ghi âm truyền thông, vật dụng, live folder 1.2 DELVING với máy ảo DALVIK Dalvik máy ảo giúp ứng dụng java chạy đƣợc thiết bị động Android.Nó chạy ứng dụng đƣợc chuyển đổi thành file thực thi Dalvik (dex).Định dạng phù hợp cho hệ thống mà thƣờng bị hạn chế nhớ tốc độ xử lý Dalvik đƣợc thiết kế viết Dan Bornstein, ngƣời đặt tên cho sau đến thăm làng đánh cá nhỏ có tên Dalvík đảo Eyjafjörður, nơi mà số tổ tiên ông sinh sống Từ góc nhìn nhà phát triển, Dalvik trông giống nhƣ máy ảo Java (Java Virtual Machine) nhƣng thực tế hoàn toàn khác.Khi nhà phát triển viết ứng dụng dành cho Android, thực đoạn mã môi trƣờng Java Sau đƣợc biên dịch sang bytecode Java, nhiên để thực thi đƣợc ứng dụng Android nhà phát triển phải thực thi công cụ có tên dx Đây công cụ dùng để chuyển đổi bytecode sang dạng gọi dex bytecode."Dex" từ viết tắt "Dalvik executable" đóng vai trò nhƣ chế ảo thực thi ứng dụng Android 1.3 Kiến trúc ANDROID Mô hình sau thể cách tổng quát thành phần hệ điều hành Android.Mỗi phần đƣợc đặc tả cách chi tiết dƣới đây: Hình 1.2 Cấu trúc stack hệ thống android 1.3.1 Tầng ứng dụng Android đƣợc tích hợp sẵn số ứng dụng cần thiết nhƣ: contacts, browser, camera, Phone…Tất ứng dụng chạy hệ điều hành Android đƣợc viết Java 1.3.2 Application framework Bằng cách cung cấp tảng phát triển mở, Android cung cấp cho nhà phát triển khả xây dựng ứng dụng phong phú sáng tạo Nhà phát triển đƣợc tự tận dụng thiết bị phần cứng, thông tin địa điểm truy cập, dịch vụ chạy nền, thiết lập hệ thống báo động, thêm thông báo để trạng thái, nhiều, nhiều nữa.Nhà phát triển truy cập vào API khuôn khổ đƣợc sử dụng ứng dụng lõi Các kiến trúc ứng dụng đƣợc thiết kế để đơn giản hóa việc sử dụng lại thành phần; ứng dụng xuất khả ứng dụng khác sau sử dụng khả (có thể hạn chế bảo mật đƣợc thực thi khuôn khổ).Cơ chế cho phép thành phần tƣơng tự đƣợc thay ngƣời sử dụng Cơ tất ứng dụng dịch vụ hệ thống, bao gồm: - Một tập hợp nhiều View có khả kế thừa lẫn dùng để thiết kế phần giao diện ứng dụng nhƣ: gridview, tableview, linearlayout - Một “Content Provider” cho phép ứng dụng truy xuất liệu từ ứng dụng khác (chẳng hạn nhƣ Contacts) chia sẻ liệu ứng dụng - Một “Resource Manager” cung cấp truy xuất tới tài nguyên mã nguồn, chẳng hạn nhƣ: localized strings, graphics, and layout files - Một “Notifycation Manager” cho phép tất ứng dụng hiển thị custom alerts status bar Activity Maanager đƣợc dùng để quản lý chu trình sống ứng dụng điều hƣớng activity 1.3.3 Library Android bao gồm tập hợp thƣ viên C/C++ đƣợc sử dụng nhiều thành phần khác hệ thống Android.Điều đƣợc thể thông qua tảng ứng dụng Android.Một số thƣ viện đƣợc liệt kê dƣới đây: - - - Hệ thống thƣ viện C: BSD có nguồn gốc từ hệ thống thƣ viện tiêu chuẩn C (libc), điều chỉnh để nhúng vào thiết bị dựa Linux Thƣ viện Media – dựa PacketVideo's OpenCORE;các thƣ viện hỗ trợ phát lại ghi âm âm phổ biến định dạng video, nhƣ tập tin hình ảnh tĩnh,bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG Bề mặt quản lý– Quản lý việc truy xuất vào hệ thống hiển thị LibWebCore- công cụ trình duyệt web đại mà quyền hạn hai trình duyệt web Android xem web nhúng SGL- Đồ họa 2D máy Thƣ viện 3D – thực dựa vào OpenGL ES 1.0 APIs; thƣ viện sử dụng phần cứng tăng tốc 3D (nếu có), tối ƣu hóa cao rasterizer phần mềm 3D FreeType- vẽ phông chữ bitmap vector SQLite công cụ sở liệu quan hệ mạnh mẽ nhẹ có sẵn cho tất ứng dụng 1.3.4 Android Runtime Android bao gồm tập hợp thƣ viện mà cung cấp hầu hết chức có sẵn thƣ viện lõi ngôn ngữ lập trình Java.Tất ứng dụng Android chạy tiến trình riêng.Máy ảo Dalvik đƣợc viết thiết bị chạy nhiều máy ảo hiệu quả.Các VM Dalvik thực thi tập tin thực thi Dalvik (dex).Định dạng đƣợc tối ƣu hóa cho nhớ tối thiểu.VM dựa register-based, chạy lớp đƣợc biên dịch trình biên dịch Java để chuyển đổi thành định dạng dex.Các VM Dalvik dựa vào nhân Linux cho chức nhƣ luồng quản lý nhớ thấp 1.3.5 Linux kernel Android dựa Linux phiên 2.6 cho hệ thống dịch vụ cốt lõi nhƣ security, memory management, process management, network stack, and driver model.Kernel Linux hoạt động nhƣ lớp trừu tƣợng hóa phần cứng phần lại phần mềm stack 1.4 ANDROID EMULATOR Android SDK Plugin Eclipse đƣợc gọi Android Deverloper Tool (ADT).Các Android coder cần phải sử dụng công cụ IDE (Integrated Development Enveronment) để phát triển, debugging testing cho ứng dụng.Tuy nhiên, coder không cần phải sử dụng IDE mà thay vào sử dụng command line để biên dịch tất nhiên có Emulator nhƣ thƣờng Android Emulator đƣợc trang bị đầy đủ hầu hết tính thiết bị thật.Tuy nhiên, số bị giới hạn nhƣ kết nối qua cổng USB, camera video, nghe phone, nguồn điện giả lập bluetooth Android Emulator thực công việc thông qua xử lý mã nguồn mở,công nghệ đƣợc gọi QEMU (http://bellard.org/qemu/) đƣợc phát triển Fabrice Bellard Hình 1.3 Android emulator String line; while ((line = reader.readLine()) != null) { String[] strings = TextUtils.split(line, "-"); if (strings.length < 2) continue; long id = addWord(strings[0].trim(), strings[1].trim()); if (id < 0) { Log.e(TAG, "unable to add word: " + strings[0].trim()); } } } finally { reader.close(); } Log.d(TAG, "DONE loading words."); } public long addWord(String word, String definition) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_WORD, word); initialValues.put(KEY_DEFINITION, definition); return mDatabase.insert(FTS_VIRTUAL_TABLE, null, initialValues); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS " + FTS_VIRTUAL_TABLE); onCreate(db); } } } 3.3.2 Lớp DictionaryProvider public class DictionaryProvider extends ContentProvider { String TAG = "DictionaryProvider"; public static String AUTHORITY = "com.example.android.searchabledict.DictionaryProvider"; 45 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/dictionary"); public static final String WORDS_MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.example.android.searchabledict"; public static final String DEFINITION_MIME_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.example.android.searchabledict"; private DictionaryDatabase mDictionary; private static final int SEARCH_WORDS = 0; private static final int GET_WORD = 1; private static final int SEARCH_SUGGEST = 2; private static final int REFRESH_SHORTCUT = 3; private static final UriMatcher sURIMatcher = buildUriMatcher(); private static UriMatcher buildUriMatcher() { UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI(AUTHORITY, "dictionary", SEARCH_WORDS); matcher.addURI(AUTHORITY, "dictionary/#", GET_WORD); matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH_SUGGEST); matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH_SUGGEST); matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT, REFRESH_SHORTCUT); matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT + "/*", REFRESH_SHORTCUT); return matcher; } @Override public boolean onCreate() { mDictionary = new DictionaryDatabase(getContext()); 46 return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { switch (sURIMatcher.match(uri)) { case SEARCH_SUGGEST: if (selectionArgs == null) { throw new IllegalArgumentException( "selectionArgs must be provided for the Uri: " + uri); } return getSuggestions(selectionArgs[0]); case SEARCH_WORDS: if (selectionArgs == null) { throw new IllegalArgumentException( "selectionArgs must be provided for the Uri: " + uri); } return search(selectionArgs[0]); case GET_WORD: return getWord(uri); case REFRESH_SHORTCUT: return refreshShortcut(uri); default: throw new IllegalArgumentException("Unknown Uri: " + uri); } } private Cursor getSuggestions(String query) { query = query.toLowerCase(); String[] columns = new String[] { BaseColumns._ID, DictionaryDatabase.KEY_WORD, DictionaryDatabase.KEY_DEFINITION, SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID}; return mDictionary.getWordMatches(query, columns); 47 } private Cursor search(String query) { query = query.toLowerCase(); String[] columns = new String[] { BaseColumns._ID, DictionaryDatabase.KEY_WORD, DictionaryDatabase.KEY_DEFINITION}; return mDictionary.getWordMatches(query, columns); } private Cursor getWord(Uri uri) { String rowId = uri.getLastPathSegment(); String[] columns = new String[] { DictionaryDatabase.KEY_WORD, DictionaryDatabase.KEY_DEFINITION}; return mDictionary.getWord(rowId, columns); } private Cursor refreshShortcut(Uri uri) { String rowId = uri.getLastPathSegment(); String[] columns = new String[] { BaseColumns._ID, DictionaryDatabase.KEY_WORD, DictionaryDatabase.KEY_DEFINITION, SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID}; return mDictionary.getWord(rowId, columns); } @Override public String getType(Uri uri) { switch (sURIMatcher.match(uri)) { case SEARCH_WORDS: return WORDS_MIME_TYPE; case GET_WORD: return DEFINITION_MIME_TYPE; case SEARCH_SUGGEST: return SearchManager.SUGGEST_MIME_TYPE; case REFRESH_SHORTCUT: 48 return SearchManager.SHORTCUT_MIME_TYPE; default: throw new IllegalArgumentException("Unknown URL " + uri); } } @Override public Uri insert(Uri uri, ContentValues values) { throw new UnsupportedOperationException(); } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } } 3.3.3 Lớp SearchableDictionary public class SearchableDictionary extends Activity { private TextView mTextView; private ListView mListView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView) findViewById(R.id.text); mListView = (ListView) findViewById(R.id.list); handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { handleIntent(intent); } 49 private void handleIntent(Intent intent) { if (Intent.ACTION_VIEW.equals(intent.getAction())) { Intent wordIntent = new Intent(this, WordActivity.class); wordIntent.setData(intent.getData()); startActivity(wordIntent); } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); showResults(query); } } Searches the dictionary and displays results for the given query @param query The search query private void showResults(String query) { Cursor cursor = managedQuery(DictionaryProvider.CONTENT_URI, null, null, new String[] {query}, null); if (cursor == null) { mTextView.setText(getString(R.string.no_results, new Object[] {query})); } else { int count = cursor.getCount(); String countString = getResources().getQuantityString(R.plurals.search_results, count, new Object[] {count, query}); mTextView.setText(countString); String[] from = new String[] { DictionaryDatabase.KEY_WORD, DictionaryDatabase.KEY_DEFINITION }; int[] to = new int[] { R.id.word, R.id.definition }; SimpleCursorAdapter words = new SimpleCursorAdapter(this, R.layout.result, cursor, from, to); mListView.setAdapter(words); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { 50 Intent wordIntent = new Intent(getApplicationContext(), WordActivity.class); Uri data = Uri.withAppendedPath(DictionaryProvider.CONTENT_URI, String.valueOf(id)); wordIntent.setData(data); startActivity(wordIntent); } }); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentNa me())); searchView.setIconifiedByDefault(false); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search: onSearchRequested(); return true; default: return false; 51 } } } 3.3.4 Lớp WordActivity Displays a word and its definition public class WordActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.word); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); } Uri uri = getIntent().getData(); Cursor cursor = managedQuery(uri, null, null, null, null); if (cursor == null) { finish(); } else { cursor.moveToFirst(); TextView word = (TextView) findViewById(R.id.word); TextView definition = (TextView) findViewById(R.id.definition); int wIndex = cursor.getColumnIndexOrThrow(DictionaryDatabase.KEY_WORD); int dIndex = cursor.getColumnIndexOrThrow(DictionaryDatabase.KEY_DEFINITION); word.setText(cursor.getString(wIndex)); definition.setText(cursor.getString(dIndex)); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); 52 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentNa me())); searchView.setIconifiedByDefault(false); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search: onSearchRequested(); return true; case android.R.id.home: Intent intent = new Intent(this, SearchableDictionary.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; default: return false; } } } 3.4 Đặc tả lớp giao diện ứng dụng 3.4.1 Giao diện - Giao diện: 53 Hình 1.giao diện Chạy ứng dụng Hình 2.Giao diện thiết kế - Mã nguồn: 3.4.2 Giao diện tra từ - Giao diện: Hình 3.Giao diện sau bấm Vào nút search Hình 4.Giao diện gõ từ cần tra - Mã nguồn: 3.4.3 Giao diện kết - Giao diện: Hình 5.Giao diện kết tìm đƣợc Hình 6.Giao diện kết không tìm đƣợc - Mã nguồn: 57 KẾT LUẬN Trong đồ án em nghiên cứu tìm hiểu cách phát triển ứng dụng Hệ điều hành Android Đồ án thực nhiệm vụ sau: - Nắm bắt đƣợc qui trình làm phần mềm mobile - Tìm hiểu lịch sử kiến trúc Hệ điều hành Android - Các bƣớc phát triển ứng dụng Hệ Điều Hành Android - Phát triển ứng dụng từ điển Anh – Việt - Hiểu thêm đƣợc nhiều kiến thức Android công nghệ liên quan nhƣ XML, XStream, Web service SOAP… Trong thời gian nghiên cứu, xây dựng chƣơng trình, em cố gắng làm việc với giúp đỡ tận tình thầy giáo hƣớng dẫn Chƣơng trình đạt đƣợc kết định Tuy nhiên với thời gian ngắn, trình độ kinh nghiệm hạn chế chƣơng trình nhiều thiếu sót Rất mong thầy cô giáo bạn tận tình giúp đỡ để chƣơng trình ngày đƣợc hoàn thiện Nếu đƣợc phát triển tiếp đề tài này, em tiếp tục bổ sung thêm nhiều ngôn ngữ khác phát triển thêm giao diện chƣơng trình để giúp ngƣời dùng sử dụng tiện ích 58 TÀI LIỆU THAM KHẢO [1] The Complete Android Guide - Kevin purdy [2] Lập trình Android - ThS Trƣơng thị ngọc Phƣợng,NXB Thời Đại [3] Hƣớng dẫn lập trình Android - Trần vũ tất Bình [4] Tìm hiểu ngôn ngữ XML - Nguyễn trung Hiếu 59