Smartphone & Tablet
Lịch sử phát triển
Các hệ điều hành cho Smartphone
Các hãng điện thoại đều phát triển hệ điều hành riêng của mình, ví dụ như SamSung thì có Pada, RIM thì có black berry, Apple thì có iOS, vv..
Các nhà sản xuất cũng có thể hỗ trợ việc nâng cấp điện thoại lên các phiên bản Android cao hơn. Hoặc đưa ra các bản cập nhật phần mềm. Kinh nghiệm cho thấy mỗi lần NSX nâng cấp phần mềm khắc phục được khá nhiều lỗi và đem lại khác nhiều cải tiến như thời lượng Pin lâu hơn, chạy mượt hơn.
Root & Jailbreak smartphone
- Thuật ngữ Jailbreak chỉ việc phá mã các thiết bị chạy nền tảng iOS trong đó có iPod Touch, iPhone và cả iPad 2.
- Thuật ngữ Root trong Android cũng tương tự, về cơ bản thì người dùng không phải là có quyền cao nhất (trong linux thì quyền root là quyền cao nhất), họ không cài được các ứng dụng nếu như hệ điều hành đó không cho phép. Việc root lại máy sẽ giúp người dùng có toàn quyền với máy và từ đó họ có thể làm gì tùy thích.
Hệ điều hành Android
Android là hệ điều hành gồm 12 triệu dòng code
Trong ad
Các ứng dụng không được phép truy cập đến dữ liệu của nhau, cũng không được phép truy cập đến dữ liệu của HĐH, trừ khi được chính ứng dụng đó cung cấp (thông qua các Content Provider mà sau này chúng ta sẽ được học).
Lịch sử phát triển của Android
Cách các nhà sản xuất điện thoại dùng Android là họ cho ra một dòng điện thoại, lấy bản open source của Android về, chỉnh sửa lại cho phù hợp với dòng điện thoại đó, rồi cài vào và tung ra thị trường. Do đó các bản Android khác nhau được gọi là các bản Room khác nhau của Android.
Thiết bị chuẩn của Android bao gồm 4 phím chính (cứng hoặc mềm) là home, back, search và menu (iPhone chỉ có duy nhất phím Home).
- Phím Home sẽ quay trở về màn hình home
- Phím back quay lại màn hình trước đó
- Phím search và menu sẽ tùy từng ứng dụng mà chúng sẽ có action tương ứng.
ð Các ứng dụng hỗ trợ khả năng giao tiếp với người dùng đến đâu là do khả năng và thiết kế của người lập trình, còn bản thân Android đã hỗ trợ đầy đủ các giao tiếp cho ứng dụng.
App Store
Kho ứng dụng trực tuyến (app store) là xu hướng của các nhà sản xuất điện thoại di động và máy tính bảng trong việc cung cấp giá trị gia tăng cho người dùng.
Apple là công ty đi đầu trong xu hướng này (với hơn 100.000 ứng dụng), app store của Android (Google) cũng đã phát triển mạnh trong thời gian gần đây và lượng ứng dụng cũng đã gia tăng đáng kể.
Để đưa được các ứng dụng của mình lên app store, các nhà phát triển (doanh nghiệp hoặc cá nhân) phải đăng kí account, nộp phí hàng năm hoặc nộp theo số lần up ứng dụng.
Lợi nhuận thu được sẽ ăn chia theo %, cách thức tính và mức lệ phí là khác nhau giữa các app store.
Android ROM
CyanogenMod là bản ROM nổi tiếng của Android, mỗi phiên bản của CM gồm:
- Stable Mod đây là bản an toàn nhất, các lỗi đã được fix
- Experimental Mod bản này được cập nhật thêm các tính năng mới nhưng vẫn còn lỗi
- Nightly Builds bản này chỉ dùng test, khuyến cáo không nên dùng với mục đích sử dụng
– Còn tiếp –
Lập trình Android
Tư tưởng trong lập trình android ??
Sự khác nhau giữa lập trình trên smartphone và trên computer
Cách mà bạn thao tác trên smartphone sẽ khác so với cách thực hiện trên PC desktop, do đó bạn cần làm quen với những thay đổi này.
Sự khác biệt lớn nhất là cách mà người dùng sẽ giao tiếp với ứng dụng của bạn. Nếu như trên máy tính người dùng có thể thao tác bằng bàn phím, chuột, có thể bật tắt hay chuyển qua lại giữa các ứng dụng một cách dễ dàng, các thao tác mà người lập trình cần xử lý cũng đơn giản hơn.
Những điều này lại hơi khó khi thực hiện trên điện thoại. (xem thêm mục hướng dẫn sử dụng điện thoại Android).
cho nên có thể thấy cách mà người dùng giao tiếp với ứng dụng của bạn sẽ khác.
Và cuối cùng, đây có thể coi là một môn kungfu đòi hỏi bạn tu luyện thì mới thành công
không giống như Hàng Long thập bát chưởng, để luyện nó đòi hỏi nội công thâm hậu và thể lực sung mãn
cũng giống như Quỳ hoa bảo điển hay kiếm phổ tịch tà, mặc dù môn kungfu này không đòi hỏi bạn phải dẫn đao tự cung, nhưng nó cũng đòi hỏi bạn phải cam kết dành thời gian và sự tập trung cần thiết để đạt được sự thành công
để biết android có thể làm những gì, và để tránh sự nhàm chán do kiến thức bị hạn chế trong giai đoạn đầu mới làm quen Android, đồng thời nâng cao khả năng thực hành, tôi sẽ hướng dẫn các bạn đi luôn vào các bài tập sau đây:
Cài đặt môi trường phát triển
Hướng dẫn tạo môi trường lập trình Android trên eclipse ??
Hướng dẫn kèm hình minh họa, cài đơn giản, không cần phải chờ lâu
??
Cài đặt SDK và IDE
một số lưu ý khi cài đặt SDK và IDE
- nếu bạn cài khác ổ C thì nên trỏ lại Javadoc trong project/properties để eclipse hiển thị help cho bạn
chỉ accept những gói nào cần cài, những gói khác thì reject nó đi
lưu ý là trong avaiable packages hiển thị cả những package bạn đã cài, cho nên cần xem lại ở installed packages để biết còn thiếu gói nào
sự khác nhau giữa SDK và API
một cái có hỗ trợ Google Map và các ứng dụng với google
sự khác nhau giữa các phiên bản SDK
3.x là cho tablet còn 2.x là cho điện thoại
Phiên bản mới nhất của Android 4.0 là bản dùng chung cho cả 2 loại thiết bị
Cấu trúc của một chương trình Android
Cấu trúc của một chương trình Android gồm các thành phần sau
Src
Chứa source code java, mỗi class nên để thành một file riêng.
Layout
Chứa các file xml giao diện
Assets
- Nơi chứa các resource của ứng dụng như các file đi kèm (html, media, db, vv..)
- Ngoài các resource như db, prefs, res (layout, string, draw, vv..) thì asset là tài nguyên dưới dạng file nguyên, không được comlipe thành binary như các loại res khác.
- Sử dụng lớp AssetManager để làm việc với các file trong asset. Lưu ý là AssetManager chỉ quản lý các tài nguyên là asset, với các tài nguyên khác thì chúng không hoạt động.
Manifest
File AndroidManifest.xml chứa các khai báo của ứng dụng
shortcut: một ứng dụng có thể có nhiều shortcut trong launcher, mỗi shortcut sẽ start một activity (một phần) của ứng dụng đó => khai báo trong manifest để biết shortcut nào, và khi chạy sẽ kích hoạt activity nào
=> nhớ khai báo label của activity khác nhau, để các icon xuất hiện với text khác nhau trong launcher
Android Tools > Fix Project Properties fix loi trong manifest
manifest bi sai thi compile không bao loi nhung se không hien thi dung
thêm activity nhưng không add vào manifest => lỗi force close
- user permission
một ứng dụng android cần những quyền nhất định để hoạt động, tùy vào chức năng của chúng
các quyền này cần được khai báo rõ trong manifest
<activity>, <service>, <receiver>, <provider>
<uses-permission >, <uses-library>
<uses-permission android:name=”android.permission.INTERNET” /> thiet dat quyet cho user duoc vao internet
<uses-library android:name=”com.google.android.maps” /> add a reference
việc thiết đặt các quyền
khai báo activity nào sẽ hiển thị lên launcher
một ứng dụng có thể có nhiều shortcut trong màn hình home, điều này cũng được quy định trọng
Activity launch mode: khai báo android:launchMode=”singleTask” thì khi start activity này, sẽ chạy lại activity nếu nó đã được khởi tạo (mang nó ra front) chứ không khởi tạo mới từ đầu => áp dụng khi bạn muốn làm nút home và không muốn user phải back liên tục
launch mode được thiết lập trong manifest hoặc thông qua Intent flags (như FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP and FLAG_ACTIVITY_SINGLE_TOP)
để tránh nhầm lẫn khi các file class giữa các project trùng tên thì nên khai báo rõ cả package trong manifest, ví dụ: packagename.activity_name
R (Resource)
Nội dung trong file R được tự động sinh ra, chứa thông tin về Id (số định dạng duy nhất) cho tất cả các thành phần còn lại của chương trình.
R chia các resource thành các category như
id: lấy id của các view được đã được đặt tên
layout: lấy các file layout trong thư mục layout
string: lấy các string trong value
Các resource trong R được lưu dưới dạng
@+id/tên
@string/tên
@colors/tên
@drawable/tên
Và lấy ra dưới cú pháp
R.id
R.layout
R.string
R.drawable
Ví dụ lấy resource theo id: String s = getResources().getString(R.string.id)
hoặc trong code: getResource().getString(tên) / getColor(tên)
Drawable
đặt icon cho ứng dụng: tạo icon 48×48 PNG và đặt vào /res/drawable, chỉnh sửa trong AndroidManifest, ngoài ra có thể tạo nhiều kích thước.
3 thư mục drawable với 3 kích thước khác nhau, để phù hợp với các kích thước màn hình khác nhau của thiết bị Android.
Viết một ứng dụng Android hiệu quả
- Ba điều căn bản cần nắm
- Tối ưu hóa code
- Một số điểm cần lưu ý trong Android
- Xử lý bất đồng bộ
- Một số kinh nghiệm hữu ích
Build ứng dụng Android với Apache Ant
??
Hello World
Xây dựng ứng dụng android đầu tiên
??
một số nguyên tắc cần nhớ
tên của file xml thì không được để chữ hoa
tên package phải có dấu chấm (.)
cần từ khóa final ở đầu là do ??
Phần tiếp theo bạn sẽ biết được làm thế nào để chạy chương trình, test chương trình
Tools
File Explorer chỉ hoạt động vs máy ảo
Bạn có thể view, pull, push or delete file trên máy ảo bằng công cụ này.
dùng để mở data/data/databases/ để mở db, pull hoặc push nó (từ máy ảo sang máy tính) rồi mở bằng tool
Testing
Debugging
Breakpoint
Dùng Ctrl + Shift + B hoặc double click để tạo một breakpoint
Để chạy chế độ debug bạn nhấn F11.
Step in (F5): debug vào bên trong hàm.
Step over (F6): chạy từng bước qua các dòng lệnh mà không debug chi tiết.
Step return (F7), ra khỏi hàm đang debug.
Resume (F8), chạy đến dòng debug tiếp theo (không theo step nữa)
F8 chạy tiếp, bỏ qua các dòng không có breakpoint (giống F5)
Ctrl + F2: kết thúc debug
Logcat
Cửa sổ ghi lại toàn bộ hoạt động của hệ điều hành, xem logcat để biết là lỗi gì, ở đâu, dùng lệnh log để ghi lại theo tag và mô tả lỗi (sau đó filter theo các tag này để xem)
- Tạo filter trong logcat để chỉ hiển thị lên những log do bạn ghi => tiện theo dõi diễn biến của chương trình, xem chi tiết dòng code nào gây lỗi.
- Nếu cửa số này không xuất hiện log => chọn lại emuator từ DBMS.
Building and Running
Run configuration: Thiết lập xem activity (những activity được khai báo là main) nào được chạy và chạy với máy ảo nào.
File apk nằm trong thư mục bin.
Deploy & Install
Từ API Level 8, hỗ trợ ứng dụng cài đặt trên thẻ nhớ ngoài, bằng cách khai báo trong manifest: android:installLocation=”preferExternal”.
Managing Projects
Virtual Devices
Tạo emulator (máy ảo Android)
- Tạo emulator từ eclipse có thể thiết đặt RAM, SDCard nhưng bộ nhớ trong (internal storage) thì lại theo mặc định, muốn tăng kích thước của bộ nhớ trong thì phải khởi động emulator bằng dòng lệnh có tham số partition size.
-
Chạy chương trình trên máy ảo ??
- Chọn Run as application > chọn máy ảo
Cài đặt ứng dụng cho emulator
- Download file apk và cài trực tiếp
- ??
Phím tắt
- Ctrl + F12 để xoay màn hình
Emulator – Máy ảo
các máy điện thoại android thường được tích hợp phần mềm market, dùng để truy cập vào android market, tìm kiếm và cài đặt các ứng dụng trên android market
các emulator không có phần mềm này và bạn không thể dùng emulator để cài đặt các phần mềm trên market, tuy nhiên vẫn có một cách: ??
==
chứa tại workspace
có thể cài trên windows, cần đặt chuẩn ip cho card mạng của máy ảo là ok
có thể nhắn tin và gọi cho nhau thông qua Id là số trên title
tạo emulator: xác định dung lượng thẻ nhớ, nếu không thì máy sẽ hiểu là bạn không có thẻ nhớ . cứ đặt dung lượng thẻ nhớ sdcard là 2GB cho thoải mái
emulator -avd api5 -system charisma_system.img
Hardware Devices
Thiết lập để chạy trên máy thật:
- Settings > Applications > Development => chỉnh lại các thông số cho debug mode
- Thêm Debuggable = true trong file manifest
- Kết nối cable điện thoại với máy tính
- Lúc này máy thật đã xuất hiện trong list device avaible => Chỉnh lại run or debug config của project trên eclipse để chạy từ máy thật.
Các cách kết nối điện thoại với máy tính
- dùng cab kết nối trực tiếp.
- dùng ftp (cài phần mềm ftp server trên smartphone, kết nối thông qua wifi).
- dùng adb (cài phần mềm adbwireless trên smartphone, kết nối thông qua wifi).
Unit Test
Tạo unit test cho ứng dụng Android, thực hiện theo các bước sau:
Tạo project test ??
Viết code unit test ??
Chạy unit test ??
Ngay lúc tạo project, eclipse cũng hỏi bạn có muốn tạo project test hay không.
Java & OOP
một số khái niệm về Java và lập trình hướng đối tượng cần nhớ trong phát triển ứng dụng Android
extends tạo một class thừa kế từ một class khác
implements tạo một class và thực hiện một interface
final khi một biến được khai báo là final thì không được thay đổi nữa
static method, static variable lưu ý đây không phải là một phần của object, do đó không thể gọi thông qua object hay từ các method non static khác. (phải gọi thông qua class)
App
- restart ứng dụng: system.exit(0)
System
getApplicationInfo() lấy ra thông tin về app, như tên package, tên ứng dụng, vv..
Timer
thiết lập schedule cho các timertask
TimerTask
đại diện cho một công việc (task) tại một thời điểm nhất định, ví dụ: 10 giây nữa thì thực thi hàm abc(), task này có thể thực hiện một lần or lặp lại nhiều lần
CountDownTimer
đếm lùi một khoảng thời gian theo một interval, ví dụ: đếm lùi 30 giây, mỗi lần đếm là một giây => như vậy là sẽ có 30 lần đếm
Kiểu dữ liệu
Date
DateFormat
SimpleDateFormat
Date & Time
Vd về sử dụng Timer và TimeTask ??
Lấy dữ liệu hệ thống: system.current ??
Activity
Các thành phần trong ứng dụng android bao gồm: Activity, Service, Broadcast Receiver và Content Provider:
- Activity
- Service
- Receiver
- Provider
Cách sử dụng:
- Activity được sử dụng khi ứng dụng của bạn cần hiển thị lên màn hình và thực hiện các giao tiếp với người dùng. Ví dụ như nhập thông tin từ người dùng
- Content Provider được sử dụng khi ứng dụng của bạn là nguồn cung cấp thông tin cho các ứng dụng khác. Vd Trong ứng dụng quản lý contact,
- Service được sử dụng khi bạn cần chạy ngầm ứng dụng (không cần giao diện).
- Receiver để bắt các sự kiện, các thông báo xảy đến.
Refresh màn hình
Đặt đoạn code bind dữ liệu của bạn vào hàm onResume thì các động tác cần refresh
Saving Persistent State
Dùng User Preferences để lưu các giá trị persistent của activity
Starting Activities and Getting Results
Kết hợp 2 hàm: startActivityForResult & onActivityResult để khởi chạy một activity khác (cùng hoặc khác ứng dụng) và trả về kết quả
Vòng đời của một chương trình Android
Do Android có thể lấy lại bộ nhớ và kill chương trình của bạn, do đó bạn cần viết code để đảm bảo dữ liệu của mình không bị mất.
Service
Service chỉ destroy nếu bị tắt từ setting/application/running service, ngoài ra nếu tắt process (bằng các ứng dụng TaskKiller) thì service cũng sẽ tự create lại (nhưng chỉ có hàm onCreate được gọi, không có onStart).
Service sẽ không bị end ngay cả khi process của ứng dụng bị kill. Service chỉ bị tắt khi bạn kill nó từ setting của Android.
Broadcast Receiver
Receiver, cách sử dụng và mối liên hệ với các thành phần khác.
Tình huống: bạn muốn thực hiện ứng dụng chặn tin rác, bạn phải khai báo một receiver để nhận biết mỗi khi có tin nhắn mới, receiver này sẽ truyền các data nhận được cho các thành phần sau đó xử lý
Vì vòng đời của receiver là rất ngắn và các tin nhắn đến nhanh cho nên bạn cần chuyển các xử lý sau đó sang một service hoặc activity
Receiver cũng có thể đăng kí từ một main activity
public static final String outgoing = “android.intent.action.NEW_OUTGOING_CALL” ;
IntentFilter intentFilter = new IntentFilter(outgoing);
BroadcastReceiver OutGoingCallReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
String outgoingno = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Toast.makeText(context, “outgoingnum =” + outgoingno,Toast.LENGTH_LONG).show();
}
};
registerReceiver(brForOutgoingCall, intentFilter);
Khi receiver được đăng ký trong activity, vòng đời của nó sẽ gắn liền với activity này, nếu activity kết thúc, receiver cũng sẽ kết thúc.
Content Provider
??
ContentObserver
Đăng kí một ContentObserver để theo dõi một sự thay đổi nội dung nào đó
Khi nội dung được theo dõi thay đổi thì đối tượng này sẽ gọi hàm callback để thông báo
Ví dụ: như để theo dõi có tin nhắn đến và đi
ví dụ: ResolveInfo, ActivityInfo, ApplicationInfo
lấy thông tin về app, activity, package
WindowManager
dùng getSystemService(WINDOW_SERVICE) để lấy ra service của HĐH
Content Providers
Contact, Call log, Setting, MediaStore, etc..
Và để làm việc với các content provider, 3 class chính là: ContentResolver, Cursor, ContentObserver
ContentResolver tương tác trực tiếp với Content Provider và thực hiện inserting, updating, and deleting data
được get từ context: ContentResolver cr = context.getContentResolver()
values.put(“RecNo”, 1000);
values.put(“name”, “This is my setting”);
values.put(“value”, “The value of this setting.”);
final String where = “RecNo” + “=?”;
final String[] args = new String[] { String.valueOf(“This is my setting”) };
cr.insert(SETTING_URL, values);
cr.update(SETTING_URL, values, where, args);
cr.delete(SETTING_URL, where, args);
Cursor được dùng để đọc data từ Content Provider, thường là kết quả query từ ContentResolver
cr.query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
sau đó thì get all column và get all data
cách query: kết hợp giữa selection và argSelection sẽ tạo nên tiêu chí trong câu query
ContentObserver
đây là abstract class, để dùng phải thừa kế và implement các method
để theo dõi những sự thay đổi từ content provider (bắt các sự kiện change data), ta phải tạo content observer và đăng kí chúng với content provider
cr.registerContentObserver(uri, true, observer);
sau khi đăng kí thành công, khi có sự thay đổi từ provider thì hàm onChange sẽ được gọi. Lưu ý là hàm onChange sẽ không biết được row hay column nào thay đổi, chỉ có cách là tự kiểm tra sự thay đổi đó
và đăng kí các content observer sẽ ảnh hưởng đến perfomance của device => hủy đăng kí khi không cần thiết
cr.unregisterContentObserver(observer);
ví dụ minh họa về lấy danh sách contact ??
??
ví dụ minh họa về lấy nội dung tin nhắn ??
??
ví dụ minh họa về lấy các media trong internal storage ??
??
Event & Handling UI event
Events
click
long click
double ckick
move
??
drag & drop
Double click
Mặc dù android không hỗ trợ double click nhưng có nhiều cách để thực hiện, ví dụ: trong onclick kiểm tra lần click thứ 2.
Move
Flling
Click ấn và thả (key down & up)
Touch chạm vào (key down) ~ LongClick chạm vào lâu (key down lâu)
Event handler
tương tự như cách viết code behind của visual studio, gồm 2 bước: khai báo handler và gán handler đó cho sự kiện
hoặc có thể khai báo theo các thức ??
điều khác ở đây (so với vs) là bạn phải tự viết code để gán sự kiện cho handler
Intent
Trong Android, cách duy nhất để các ứng dụng giao tiếp với nhau là thông qua Intent
data của intent bao gồm: action, category, component. Các giá trị khác sẽ được lưu trong extra
data=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.calculator2/.Calculator }
tùy vào action và data (uri) sẽ quy định ứng dụng nào xử lý, ví dụ: cùng là action main nhưng nếu uri là một url thì sẽ do ứng dụng brower xử lý (browser đến địa chỉ đó), còn nếu uri là một contact thì sẽ do ứng dụng contact xử lý (hiển thị chi tiết về người đó)
Category là home thì khi button home được click, intent sẽ được gọi
Category là launcher thì activity sẽ được list trong launcher
2 thành phần chính của app (activities, services, and broadcast receivers) được gọi thông qua các intent, nó là late run-time binding giữa các class (trong cùng ứng dụng hoặc giữa các ứng dụng)
action là MAIN thì class đó sẽ chạy như là hàm main của app
category là LAUNCHER thì class đó sẽ xuất hiện trong launcher
category là DEFAULT thì class sẽ xử lý action đó như là default (trường hợp có nhiều class cùng xử lý action đó)
ví dụ: các action như: SENDTO, CALL_BUTTON, vv.. sẽ xử lý các sự kiện như nhấn nút gọi, có tin nhắn
tùy vào target component (activity, receiver, hay service) mà action và category của intent sẽ khác nhau
setType
setData
setAction
Uri: đây giống như điều kiện FROM của câu lệnh query, khi query từ content provider, đầu tiên bạn cần chỉ định query ở đâu
projection: giống như danh sách các column bạn cần select khi query, nếu để null thì mặc định sẽ lấy toàn bộ column
Intent Filter
khai báo một class sẽ chấp nhận những loại thông điệp nào
intent là thông điệp truyền đi, còn filterm (của một class) sẽ lọc những thông điệp này để chỉ lấy những thông điệp mà class có khả năng xử lý
khi một action xảy ra, android sẽ thông báo đến toàn bộ hệ thống => khi có nhiều hơn một ứng dụng khai báo để xử lý một intent action thì launcher sẽ hỏi người dùng trước khi chạy ứng dụng họ muốn
=> hãy nhớ là kể cả khi ứng dụng của bạn không chạy, thì launcher sẽ khởi chạy nếu có intent filter tương ứng
có nhiều loại, như intent action, app action, provider, vv.. tương ứng với từng thông điệp đến từ đâu và nội dung của thông điệp là gì
ví dụ: android.provider.Telephony.SMS_RECEIVED, hay android.intent.action.NEW_OUTGOING_CALL
Trong android, kể cả khi đã tắt ứng dụng nhưng nếu có intent gọi tới ứng dụng đó thì nó lại bật lên
Lập trình UI – Giao diện
Khi bắt đầu làm quen với lập trình giao diện trong Android, nhiều người thường hay bị lấn cấn bởi việc sử dụng các file xml, theo tôi để tránh việc lấn cấn này, bạn nên bắt đầu tạo các giao diện mà không cần tới các file xml này, dùng xml chỉ là cách để bạn tạo giao diện đơn giản và nhanh chóng hơn mà thôi.
wrap_content & fill_parent
wrap_content sẽ xuống dòng nếu nội dung quá dài, còn fill_parent thì chỉ giới hạn theo kích thước màn hình, dài quá thì sẽ bị mất
hãy thực hành cách tạo giao diện bởi các bài thực hành sau:
- Sample từ android tutorial UI
- ??
Enviroment
Windows
requestWindowFeature(Window.FEATURE_NO_TITLE);
ok, như vậy là bạn đã tương đối hiểu cách mà android giao tiếp với người dùng, bây giờ hãy chuyển qua cách thiết kế UI bằng XML
tôi muốn nhắc lại XML chỉ là một cách khác để bạn tạo giao diện nhanh hơn thôi (có thể điều này chưa chính xác lắm nhưng ở level này thì bạn chỉ cần hiểu như thế là đủ)
thực hành lại bài một với cách dùng XML
activity chứa view và viewgroup (cũng là một view)
view là các widget, viewgroup là nhóm các view, một số thuộc tính của view chỉ có khi nó thuộc group
View
xml layout và view
root view là view parent chứa các view khác, đây thường là các layout
bản chất của file layout khi được nạp là sẽ được chuyển thành các view object, bắt đầu từ root view
LayoutInflater
chuyển file xml thành view object, dùng getLayoutInflater() or getSystemService() (của context hiện tại) để lấy về LayoutInflater
dùng inflater sẽ “thổi phồng” một layout lên (thành view object) và tìm các view ở trong nó (trả về root view của file layout or hierachy các view đó, lấy root view rồi lấy các chirld view => thường dùng để lấy layout xml không phải của activity hiện tại, tham số thứ 2 là option nên có thể truyền null). ví dụ: bình thường bạn có thể dùng luôn hàm findViewById để lấy view trên context hiện tại (xml mà activity này đang set content), nhưng khi lấy ở một file xml khác thì cần dùng hàm find này với root view của xml đó
Custom View
một số view có thể custom để trông đẹp hơn, ví dụ: default thì item của listview chỉ là text, ta có thể chỉnh để mỗi item là sự kết hợp giữa text và image
=== Action Bar
hiển thị icon và một số option menu
=== error handle
dùng log: if (DEBUG_MODE)
android.util.Log.i(TAG, msg);
android.util.Log.e(TAG, msg);
android.util.Log.w(TAG, msg);
=== Adapters
sử dụng một class adapter có sẵn hoặc một class được viết lại thừa kế từ BaseAdapter
=== Styles and Themes
style tương tự cascading stylesheets trong web design, được định nghĩa trong một file xml, tách biệt khỏi content
theme là một style nhưng nó được apply tới toàn bộ activity or application hoặc một loại view nào đó
=== R
các giá trị lấy trong R là các giá trị int (đã được id hóa)
=== common error
không báo lỗi nhưng lại không chạy đúng => chưa khai báo activity trong manifest
====== Intent
Thông điệp truyền tải giữa các ứng dụng hoặc trong các ứng dụng với nhau, intent được truyền vào cho các hàm như Context.startActivity(), Context.startService(), hay Context.sendBroadcast()
broadcasts là chỉ hành động truyền tải thông điệp tới tất cả ứng dụng khác (không quan tâm là có nhận hay có nhận được được hay không)
=== Supporting Multiple Screens
=== Cấu trúc project
asset nơi chứa data hoặc file để compile cùng apk
Basic View
Actvity UI single, chứa các view, implement Context class, do do thuong pass this vao cho các tham số Context
ListActivity là một activity chứa listview
Adapter kết nối giữa context, layout và datasource
ListAdapter kết nối giữa ListView và datasource
ViewGroup view chứa các view khác
Drawable
State List chứa nhiều state của một ảnh, tự động chuyển đổi khi state thay đổi, kết hợp với file xml có selector là gốc
Color State List tương tự như drawable
View Group
Tabhost
TabView phải đặt id và phải có widget ở layout với id là tabs
Google Maps dùng keytool của java
0f_KbAX08ewfw-N7Oa3mVz5XhSSed_Xf12s-q3A
63:C9:2F:A6:B7:10:F9:EE:BB:91:A7:C5:67:3C:01:15
Layout
AbsoluteLayout mọi kích thước và vị trí đều là tuyệt đối (giá trị tuyệt đối), và sẽ không tự động thay đổi => khuyến cáo không nên dùng (deprecated)
TableLayout các view được sắp xếp theo hàng và cột trong bảng (trong các tablerow)
RelativeLayout vị trí của các view là tương đối so với parent (kết hợp giữa align và margin)
FrameLayout chứa các view và neo (anchored) tại top left của nó => thường dùng để giữa chỗ (placeholder) để chứa duy nhất một view, nếu nhiều hơn sẽ bị che khuất (overlap)
ScrollView khi có nhiều view, vượt quá độ dài của màn hình thì dùng scrollview, scrollview chỉ chứa được một view or groupview (trong group đó thì chứa nhiều cũng được), không nên dùng listview với scrollview (listview là chứa các item có cùng thuộc tính trong khi scroll chứa các view khác nhau)
tất cả các layout là view group
Widget
Widget là một cách để ứng dụng giao tiếp với người dùng
tạo widget cho ứng dụng
Context
như là interface giữa ứng dụng của bạn với hệ thống, khi làm việc với UI đều phải super tới context vì nó đảm nhiệm việc truy cập resource (R.id, R.layout, ..)
thông qua context để điều khiển hệ thống, dùng đối tượng context để làm việc với hệ thống
Context là đối tượng xuyên suốt khi bạn lập trình Android
dùng this nếu đang ở trong activity
dùng getApplicationContext() trong các tình huống khác
với service hoặc receiver thì context thường được truyền luôn vào tham số của các hàm khởi tạo (onCreate)
lưu ý: context sẽ tùy thuộc vào ngữ cảnh, do đó bạn cần phân biệt ngữ cảnh để lấy context cho đúng, nhất là với các hàm dạng inline
Dialogs
các dialog hoạt động theo mô hình gồm dialog manager và các dialog
dialog manager sẽ điều khiển hoạt động các dialog như create, dismiss, show, etc
Menu
Option menu
- Option menu là cái được hiển thị khi click vào phím menu, menu này chỉ hiển thị khi bạn lập trình cho nó, các chương trình không có lập trình menu thì khi click menu sẽ không hiển thị gì cả
Context menu
- Menu hiển thị theo ngữ cảnh hiện tại
Submenu
- Chọn một giá trị từ list
Lưu ý là icon cho menu nên chọn kich thước nhỏ (24 or 16)
Inflating: là thuật ngữ chỉ việc convert xml resource thành programmable object, thường được áp dụng với menu, list view, etc.
Notifying the User
Thông báo tới người dùng
Toast
setText, setPosition hay dùng layout
Status Bar Notifications
Hiển thị thông tin lên thanh status, gồm icon, text và intent để kích hoạt activity khác
Notification có thể fire một activity, vibrate, led, ring
một service không nên fire trực tiếp một activity mà chỉ nên hiển thị bằng notification và từ notification có thể fire lên activity
Dialog
có nhiều loại: AlertDialog là loại chỉ hiển thị, Dialog khác còn có thể nhận thông tin từ user
Aimation
??
Location & Language
- ví dụ về change language real time ??
- ví dụ về localize (bản địa hóa, địa phương hóa)
Một số kỹ năng xử lý giao diện
- Custom view
- Animation
- Thiết kế layout hiệu quả
Data Storage
Shared Preferences
Các shared preference lưu dữ liệu ở ?? và khác nhau cho mỗi ứng dụng và activity
Lưu dữ liệu theo kiểu key-value, thích hợp cho việc lưu cấu hình và setting của ứng dụng
- Chỉ hỗ trợ các loại sau, nên nói chung là sẽ khó tùy biến
CheckPreference
EditPreference
ListPreference
RingTonePreference
Preference
PreferenceCategory
PreferenceScreen
Dùng các view này trên xml sẽ đỡ phải code rất nhiều vì chúng đã tự động
Internal Storage
External Storage
SD Card
- Check status: Làm việc với thẻ nhớ ngoài cần qua một số bước kiểm tra như check tình trạng của thẻ nhớ ngoài: media might be mounted to a computer, missing, read-only, or in some other state.
- Read/Write on sd card: sử dụng các lớp file, directory để ghi và đọc dữ liệu lên sd card.
SQLite Databases
Chi tiết của phần này sẽ được nêu trong phần lập trình cơ sở dữ liệu.
Lập trình Database
trong lập trình database với android, bạn sẽ dùng CSDL SQLite, đây là một hệ quản trị cơ sở dl đơn giản nhưng vẫn đáp ứng đầy đủ sức mạnh để bạn lưu trữ và truy cập dữ liệu
chọn phương pháp lưu trữ data cho ứng dụng tùy thuộc vào yêu cầu cụ thể như: độ lớn của dữ liệu, quyền truy cập (có share hay không), vv..
SQLite
thư mục chứa SQLite: /data/data/ten_package/database/ten_db
dùng lệnh SQLite3 để kết nối bằng adb
Intenal API & Java Libraries
Package và class
??
PackageManager
class lấy thông tin về các package trong máy
dùng getPackageManager để lấy ra class này
- ví dụ về lấy danh sách các package name and class
- ví dụ về lấy danh sách activity
Internal APIs and hidden APIs
Android có 2 loại API mà không truy cập được theo SDK
Internal APIs nằm trong package com.android.internal
hidden APIs là những API được make with @hide javadoc attribute
Internal API
có những package mà không hiện diện trong API nhưng lại rất cần cho phát triển ứng dụng, ví dụ như các API cho điều khiển cuộc gọi “com.android.internal.telephony”
Libraries jar and Android Libraries
??
Lập trình Game – 2D
2D
color
paint
path
Processes and Threads
Thread
Handler & Runnable
kết hợp 2 đối tượng này sẽ tạo nên một thread trên cùng process.
Multimedia and Camera
Media
package android.media có đầy đủ các class để bạn thao tác với media
Audio Manager
điều chỉnh Volume
volume trong Android chia làm nhiều loại, volume cho ringtone, volume cho music, vv..
MediaPlayer
chơi nhạc
ví dụ về chơi nhạc và điều chỉnh volume
??
Image
?
Search
USB
Bluetooth
Wifi & 3G
Network Connection & Internet
??
Ứng dụng có kết nối mạng
- Lựa chọn data format
- Poll và Push
- Cache
Web Applications
Tương tự với ứng dụng trên máy tính, có 2 cách để bạn phát triển và phân phối 1 ứng dụng ad, đó là phát triển bằng client side application (cài đặt và chạy trên máy bằng file apk) và web application (không cài đặt, chỉ chạy thông qua browser)
gửi email
đọc web
Check update
bạn nâng cấp sản phẩm sau khi đã đưa lên app store ??
Android Cloud to Device Messaging
C2DM: http://code.google.com/intl/vi-VN/android/c2dm/ => đây là dịch vụ push notification: send data từ server to client (để thông báo có bản cập nhật mới của ứng dụng hay user data)
Sample: http://code.google.com/p/chrometophone => là ví dụ cho ứng dụng kiểu này
Location and Maps
Location & GPS
2. Lập trình với GPS:
- Cơ bản về định vị
- Kết hợp với bản đồ
- Kết hợp với cảm ứng để làm một ứng dụng dạng AR
Contact & Dialer
Các class phục vụ cho send sms và gọi điện
SmsManager
TelephonyManager
lưu ý:
một số đối tượng trong android, nhất là các đối tượng liên quan trực tiếp tới hệ thống, ví dụ như TelephonyManager thì không khởi tạo theo cách thông thường là new object() mà phải khởi tạo thông qua context và
các lệnh, ví dụ như context.getSystemService(SERVICE_FLAG)
SMS Messager
Vd về gửi sms, đọc nội dung tin nhắn đến ??
Application Framework
S
Hiểu hơn về application frameworks:
- Lifecycle và các vấn đề liên quan
- Tương tác giữa các ứng dụng
- Process và task
Eclipse
Việc sử dụng thành thạo công cụ Eclipse có thể giúp giảm đáng kể thời gian phát triển. Giúp bạn tập trung hơn cho việc viết code. Dành một giờ để nghiên cứu các tính năng của eclipse sẽ giúp bạn tiết kiệm được hàng trăm giờ trong lập trình sau này. Với Eclipse, đây có thể coi là công cụ hoàn chỉnh nhất để lập trình Android.
Các phím tắt thông dụng trong Eclipse
F2 show tooltip description (từ javadoc) cho hàm hiện tại khi bạn trỏ đến, nhấn F2 để forcus vào help java => xem cú pháp hàm
Ctrl + Click chuột (tương tự phím F3) chuyển đến defined của hàm hay biến hay xml được định nghĩa.
Ctrl + 1 show quick fix cho error hiện tại, từ đó có thể thực hiện nhiều việc khác, như extract ra biến, tách chuỗi (đây là menu khá hay cho những ai mới lập trình android, khi mà code toàn đỏ lòm)
Alt + / tự động hoàn thành từ đang gõ
Ctrl + Shift + Space hiển thị danh sách tham số
Ctrl + Shift + Insert tự động điền các tham số khi chọn hàm
F3 chuyển đến phần khai báo của biến, hàm
Ctrl+O mở bảng để goto một biến hoặc một hàm
Ctrl+PGUP, PGDOWN chuyển các tab (thay ctrl + tab trong vs)
Ctr + F11: Chạy ứng dụng, file java của project nào đang mở thì sẽ run project đó
Các menu trong Editor
Open Call Hierarchy
open những lời gọi hàm đang được chọn => kết quả được hiển thị trong cửa sổ call hierarchy
Open Declaration
open khai báo hàm (Lưu ý là cần phải chọn hàm trước khi chọn menu)
Override method hay chuyển filed thành thuộc tính (set/get)
Source -> Override/Implement Method
Source -> General Setter/Getter
Comment
Ctrl + “/”: tự động thêm cụm “//” vào đầu dòng code.
Ctrl + Shift + “/”: tự động thêm “/* */” vào khối code được chọn.
Ctrl + Shift + “\”: tự động bỏ “/* */” vào khối code được chọn.
Gõ tiếng việt
Window -> Preferences -> General -> Workspace -> Text File Encoding -> Other -> UTF-8
Device
Để mở cửa sổ quản lý device (máy ảo và máy thật)
Window -> Show View -> Device hoặc vào Window -> Show View -> Others -> Android -> Device
Chức năng Screen Capture, giúp bạn có thể chụp lại giao diện ứng dụng để làm ảnh minh họa khi giới thiệu ứng dụng của bạn
Show các perspective (cửa sổ con)
Show các view outline và properties để xem các view và thuộc tính của chúng
Kể cả khi bạn đã thay đổi rất nhiều các thiết lập ban đầu của eclipse thì bạn vẫn có thể reset lại từ đầu bất cứ lúc nào.
File Explorer
Window -> Show View -> Others -> Android -> File Explorer
Quản lý file trong SD Card và System file data (không quản lý được system data của thiết bị thật).
Search
Eclipse có hẳn một menu search để bạn sử dụng, khác với phím tắt Ctrl + F thông thường chỉ find trong file hiện tại.
Chuyển nhanh giữa các Tab: ctrl + pageup/down hoặc Alt + left/right
Chuyển giữa các tab: Ctrl + E or Ctrl + F6
Hoặc chỉnh config theo ý bạn: preferences->general->keys and search for “next tab” and “previous tab”
Project Properties
Dùng để set build target cho project, change project as library, add reference
Import project – Tạo project từ source code có sẵn
File/New project/ from exist source/chọn path đến source
Kéo thả vào project các resource, file
Kéo file từ Windows Explorer hay từ các project khác để thêm vào project hiện tại
Add một gói JAR như là một user libraries
Your Project Folder->Build Path->Add Libraraies…->User Library
Nhớ là thiết lập defined name và rule cho libraries đó thì ứng dụng mới chạy được
Chức năng suggest của eclipse
Mỗi khi code có lỗi, bạn trỏ chuột đến phần báo lỗi và sẽ được eclipse đề xuất các giải pháp khắc phục lỗi, ví dụ như khi bạn viết class để implement một interface, eclipse sẽ báo lỗi nếu bạn implement thiếu, khi bạn trỏ chuột đến phần báo lỗi tương ứng, eclipse sẽ đề nghị bạn thêm phần còn thiếu vào, chỉ cần click vào suggest này, eclipse sẽ tự động thêm phần còn thiếu cho bạn => quá đã !
Trường hợp cửa sổ Logcat không hiển thị thông tin (total empty)
Vào DDMS, chọn vào Devices, click vào emulator (thường xảy ra khi bạn khởi động emulator từ eclipse nhưng sau đó tắt đi)
Package Explorer
Thiết lập working set và hiển thị ở chế độ này cho phép nhóm các project cùng loại lại với nhau (ví dụ: nhóm các project là sample code hoặc để test thử, và nhóm các project đang phát triển)
Các lưu ý khác
Eclipse sẽ tự động đổi tên package khi bạn copy một file từ package này sang package.
Eclipse sẽ tự động thêm các dòng import cần thiết khi bạn copy một hàm từ class này sang class khác.
Các ứng dụng phải khác tên package (Android không cho phép các ứng dụng trùng tên package).
Cẩn thận khi mở các project có cùng tên package, các package có thể được tham chiếu không đúng.
Tools
Một số công cụ sử dụng cho phát triển Android.
adb
Công cụ để điều khiển thiết bị bằng dòng lệnh
Thực hiện bằng các dòng lệnh kiểu linux.
Bật máy ảo lên rồi dùng lệnh adb shell để vào giao diện của adb
adb connect ip_address:port
kết nối đến máy thật, lúc này eclipse sẽ chạy kết nối với máy thật thay cho máy ảo, lúc này xem log, chạy debug, vv.. đều là chạy trên máy thật (chú ý chỉnh lại run config và uninstall ứng dụng cũ)
sau khi connect, dùng các lệnh install/uninstall để cài đặt or gỡ ứng dụng
adb: android debug bridge
ứng dụng để điều khiển máy android (máy ảo hoặc máy thật) => phải bật máy ảo lên hoặc kết nối với máy thật thì những lệnh sau đây mới có tác dụng
adb enterlist hiển thị all dòng lệnh
adb pull lệnh pull với adb làm tham số để lấy file từ máy ảo về máy tính
adb push ngược lại với pull
adb shell vào giao diện của adb
exit thoát khỏi giao diện adb
lưu ý: để các đường dẫn trong dấu “” (nhất là các đường dẫn có khoảng trống)
adb install <path_tên_file.apk> install apk cho máy ảo
Lệnh chuyển mặc định cài ứng dụng trên internal sang SD card, hoặc chuyển cả những ứng dụng không cho chuyển sang SD card: adb shell pm setInstallLocation 2 (rồi ENTER) (0: auto; 1: internal; 2: external).
draw9patch.bat
ứng dụng chỉnh sửa ảnh, cho phép tạo ảnh có khả năng co dãn (ảnh có số 9)
DroidDraw
DroidDraw là công cụ để thiết kế UI cho ứng dụng android
công cụ hỗ trợ thiết kế giao diện đơn giản và hiệu quả
Git
Checkout source code bằng công cụ Git
Git là một free version control system. Nghĩa là nó là một hệ thống quản lý source code miễn phí giống như SVN vậy đó. Khác với Google code, cái này hỗ trợ bạn quản lý các dự án có quy mô lớn.
Code source của android chỉ hiển thị lên trang web để xem thôi. ví dụ: http://android.git.kernel.org/?p=platform/packages/apps/Contacts.git;a=tree
Để checkout được source code về các bạn phải làm các bước như sau:
Bước 1: Các bạn tải và cài đặt cywin http://www.cygwin.com/
Bước 2: Tải và cài đặt Git tool tại đây http://git-scm.com/
Bước 3: Checkout source về bằng cách nhấn chuột phải vào nơi nào đó trong máy tính rồi sau đó chọn Git Bash
Màn hình cywin console xuất hiện. Sau đó bạn gõ lệnh với câu trúc như sau
git clone <đường dẫn tới project>
(Ctrl + Insert để paste)
Ví dụ:
git clone git://github.com/git/hello-world.git
git clone git://android.git.kernel.org/platform/packages/apps/Contacts.git
Phụ lục – Tham khảo
FAQ
Best Practices
Một số kỹ thuật để tối ưu hóa code trong Android
Common Task
Common Error
- Import sai R, thường là khi copy từ project này sang project khác.
- Chưa khai báo thành phần trong manifest: các activity, service hay receiver được sử dụng trong ứng dụng đều phải khai báo đầy đủ trong manifest.
- Chưa khai báo đủ quyền trong manifest:
- Emulator không đúng target SDK hoặc khi đổi workspace thì phải chỉnh lại path đến SDK.
Fix Guide
- Clean Project.
- Refresh Project.
Sample code
Tham khảo
– Còn tiếp –
Ứng dụng trên Android
Điều mà các lập trình viên mới bắt đầu học Android thường thắc mắc là trên Android có những loại ứng dụng nào, Android có thể làm được những gì, vv.. Phần này sẽ là câu trả lời cho các vấn đề này.
Phần mềm cho Android có thể chia làm 2 loại chính là game và ứng dụng.
- Game thì gồm các thể loại rồi: đối kháng, nhập vai, online, offline, vv..
- Ứng dụng cũng được phân thành nhiều loại như: ứng dụng cho học tập, cho tài chính, .. hay các ứng dụng phục vụ trực tiếp cho việc gọi điện, nhắn tin, quản lý file trên điện thoại, vv..
Sau đây là các bài tập minh họa cho các loại ứng dụng
- Lập trình cuộc gọi: lấy thông tin cuộc gọi (call log), chặn cuộc gọi, trả lời tự động
- Lập trình tin nhắn: đọc nội dung tin nhắn, gửi tin nhắn
- Lập trình contact: lấy danh sách contact, thêm contact, xóa contact
- Lập trình giao diện: thiết kế các kiểu layout, thiết kế menu, thiết kế dialog
- Lập trình database: tạo và cập nhật database
- Lập trình storage: đọc thẻ nhớ, tạo thư mục trên thẻ nhớ,
- Lập trình phone state: lấy thông tin về nhà mạng, số điện thoại, serial sim
- Lập trình Internet: sử dụng Web service
- Lập trình GPS:
- Lập trình 2D:
- Lập trình 3D:
– Còn tiếp –
Sử dụng điện thoại Android
Thật khó để viết một chương trình Android nếu bạn chưa làm quen với hệ điều hành này. Phần này sẽ hướng dẫn một số thao tác cơ bản khi sử dụng điện thoại Android.
Thiết bị Android
Thiết bị chuẩn chạy Android thường có 4 phím là home, menu, search, back, ngoài ra với điện thoại thì thường có phím call và end (phím cứng hoặc mềm). Chức năng của các phím như sau:
Phím home: quay về màn hình home
Phím menu: mở menu của ứng dụng, tùy theo ứng dụng có thể có hoặc không có menu
Phím back: quay lại màn hình trước đó
Phím search: tương tự phím menu, cũng tùy vào chức năng của ứng dụng
Các thao tác khi sử dụng điện thoại Android (cũng như các điện thoại có màn hình cảm ứng nói chung):
click (press): chạm và bỏ ra
touch (long press): chạm và giữ
drag & drop: chạm và di chuyển
Một số phím tắt trên Android
long press home => hiển thị recent app và cho phép chuyển giữa các ứng dụng
long press call => hiển thị danh sách số vừa gọi
long press end => reboot máy, chuyển sang chế độ rung hay chế độ airplan
long press trên màn hình home => tạo shortcut
long press trên app trong list => kéo ra home
long press trên app trên màn hình => di chuyển or xóa khỏi màn hình
press nút back => quay lại history của browser
long press nút camera => kích hoạt ứng dụng chụp ảnh
Ứng dụng mặc định
Các ứng dụng được cài đặt mặc định trên điện thoại Android thường bao gồm (còn tùy vào từng bản ROM khác nhau):
Market app
Ứng dụng download và cài đặt các ứng dụng từ Android Market, lưu ý là Market app chỉ hiển thị những ứng dụng nào có phiên bản phù hợp với máy của bạn, do đó sẽ có những ứng dụng bạn tìm thấy trên web nhưng lại không thấy khi vào bằng ứng dụng market app.
Contact & Dialer: ứng dụng quản lý contact và gọi điện
Messager: ứng dụng gửi tin nhắn
Launcher: Cũng giống như ứng dụng windows explorer của windows, launcher là app quản lý màn hình nền và khởi chạy các ứng dụng khác.
EMI (bàn phím ảo)
Setting: Ứng dụng thiết lập các thông số cho điện thoại
Ngoài ra còn có các ứng dụng như: Google Map, Calendar, Email, Camera, Clock, Calculator, vv..
Các khái niệm và thao tác khác
Force close
Cũng giống như khi ứng dụng trên Windows bị treo, HĐH sẽ đưa ra thông báo và đóng ứng dụng. Các ứng dụng trên Android khi bị treo sẽ được HĐH hiển thị thông báo Force close và đóng ứng dụng.
Điện thoại brick
Brick là thuật ngữ chỉ việc điện thoại bị treo, không khởi động được (không vào được boot animation, mà chỉ hiển thị logo).
Giống như máy tính không thể khởi động hoặc không thể vào được windows, điện thoại Android cũng gặp tình huống tương tự.
Xử lý khi điện thoại bị brick
Tắt nguồn (tháo pin), lắp lại pin, dùng tổ hợp phím để vào recovery mode của điện thoại (tổ hợp phím để khởi động tùy vào từng hãng và model – xem thêm hướng dẫn ở website của nhà sản xuất).
Vào WIPE để clear Delvik Cache, rồi khởi động lại. Nếu không được thì clear cache, Delvik Cache, khởi động lại rồi vào Backup and Restore để restore lại các lần backup trước đó. Hoặc tiến hành cài lại ROM.
Cài lại ROM
Việc cài lại ROM thực hiện theo các chỉ dẫn trên mạng. Nhớ là sau khi cài lại, lần khởi động đầu tiên bao giờ cũng lâu (between logo and boot animation), nhưng sẽ không ổn nếu quá trình này kéo dài quá 5 phút.
Điện thoại không tự động nhận sim
Có thể khắc phục bằng cách chuyển sang chế độ airplan mode hoặc khởi động lại máy.
Cài đặt ứng dụng cho điện thoại Android
Mặc định các ứng dụng sẽ cài lên bộ nhớ trong, sau khi cài có thể chuyển ứng dụng sang thẻ nhớ (với điều kiện là ứng dụng đó hỗ trợ chạy được trên thẻ nhớ)
Khi cài một ứng dụng, Android sẽ chỉ rõ các quyền mà ứng dụng đó yêu cầu (ví dụ: quyền đọc/ghi dữ liệu trên thẻ nhớ, quyền truy cập internet, quyền thực hiện cuộc gọi, nhắn tin, vv..).
Các cách cài ứng dụng cho điện thoại Android bao gồm:
- Chép ứng dụng vào thẻ nhớ để cài.
- Cài online qua ứng dụng market app.
- Gửi file apk của ứng dụng vào hòm thư gmail, rồi check email trên điện thoại, các ứng dụng apk sẽ tự động được cài đặt.
Account & Sync – Đồng bộ tài khoản người dùng
Android yêu cầu người dùng phải thiết lập một tài khoản gmail, và sau đó Android cho phép (và để ở chế độ tự động) đồng bộ hóa dữ liệu từ điện thoại với tài khoản này.
Backup/Restore – Sao lưu/Phục hồi
Việc sao lưu đảm bảo mọi dữ liệu trên điện thoại được lưu trữ để phục hồi khi cần thiết. Khuyến cáo là bạn nên thực hiện sao lưu thường xuyên để đảm bảo dữ liệu được an toàn.
User default setting
Khi 2 hoặc nhiều ứng dụng cùng có chức năng xử lý một sự kiện thì trong lần đầu tiên, Android sẽ để user lựa chọn ứng dụng mặc định để xử lý sự kiện đó.
Ví dụ: nếu bạn cài nhiều ứng dụng gọi điện trên cùng một máy thì khi bạn ấn nút gọi, Android sẽ hỏi bạn muốn dùng ứng dụng gọi điện nào, và có để ứng dụng đó là ứng dụng gọi điện mặc định hay không.
Hoặc như khi bạn cài nhiều Launcher trên máy, thì mỗi lần ấn nút home, Android sẽ hỏi bạn muốn ứng dụng nào xử lý.
Clear default
Clear default để xóa bỏ các thiết lập mặc định trước đó, bạn có thể thiết lập lại giá trị default khác.
Reset toàn bộ các setting trong Android
Vào setting > Privace > Factory data reset
Dữ liệu của các ứng dụng hệ thống và Android sẽ mất (ngoại trừ các ứng dụng download).
SD Card – Thẻ nhớ
Cấu trúc thư mục trong Android theo linux, do đó sẽ hơi khác so với trong windows
Cấu trúc thư mục của SDCard
Record audio được lưu tại thư mục gốc SDCard
Ảnh chụp từ camera lưu tại SDCard/DCIM
Thư mục chứa các share pref (thông số thiết lập của các ứng dụng): SDCard/data/shared prefs
Ngoài ra thì các ứng dụng có thể tạo thư mục bất kỳ ở trên đây
Internal Storage – Bộ nhớ trong
Cấu trúc thư mục Internal Storage
Phát triển ý tưởng Android
Các bước để tiến hành phát triển một ý tưởng Android
Bước 1: Case Study – Tình huống thực tế
Mô tả các tình huống sử dụng, những tình huống mà bạn và những người dùng smartphone thường gặp phải trong quá trình sử dụng.
Bước 2: User requirement Defined – Xác định yêu cầu người dùng
Từ mô tả tình huống để xác định nên tập hợp các nhu cầu người dùng.
Ứng dụng của bạn dự định phát triển thuộc thể loại nào, trong lĩnh vực nào, chủ đề là gì ?
Bước 3: Feasibility Evaluation – Đánh giá tính khả thi
Thực tế thì Android market hiện đã có rất nhiều ứng dụng, đủ các thể loại, và nói chung hầu hết các nhu cầu đều đã có sản phẩm đáp ứng. Tuy vậy không phải là không có cơ hội để bạn tìm kiếm những ý tưởng riêng của mình.
Bao gồm việc tìm kiếm các ứng dụng hiện có đã phục vụ tốt cho những mục đích như trên hay chưa ? Giá bán có cao không? Người dùng đón nhận chúng như thế nào, nếu bạn phát triển sản phẩm thì có những lợi thế nào, etc.
Bước 4: Function Developement – Phát triển chức năng
Chức năng, giải pháp mà ứng dụng của bạn sẽ giải quyết để phục vụ cho các nhu cầu kể trên.
Một ứng dụng Android nên tập trung vào một vài chức năng chính để tạo nên giá trị cốt lõi. Không nên mở rộng phạm vi ra nhiều, vượt quá phạm vi ban đầu.
Example – Ví dụ minh họa
Ví dụ sau minh họa cho việc xây dựng ý tưởng và phát triển ứng dụng “Tính cước và quản lý mức cước phát sinh”.
- 1. Tình huống thực tế
- Người dùng tra cước (*101#) và thường băn khoăn là không biết mình gọi khi nào, gọi bao nhiêu cuộc mà tiền lại nhanh hết thế.
- Người dùng nạp thẻ nhưng không biết trong tháng vừa rồi họ tiêu tốn hết bao nhiêu tiền cước điện thoại
- Người dùng muốn hạn chế mức cước phát sinh, hay ít nhất là được cảnh báo khi cước phát sinh vượt hạn mức
- 2. Xác định yêu cầu người dùng
- Giống như thông báo chi tiết cước của các thuê bao trả sau, người dùng cần có bản danh sách để theo dõi việc tính tiền đúng của nhà mạng cũng như để kiểm soát tổng lượng cước phát sinh.
- Người dùng cần được nhắc nhở / cảnh báo khi cuộc gọi vượt quá thời gian đã thiết lập, điều này rất hữu ích khi thuê bao đang áp dụng các hình thức khuyến mại như gọi 10 phút tính tiền 1 phút.
- Người dùng có nhu cầu chặn các cuộc gọi đi trong các trường hợp:
- Chặn gọi ngoại mạng – khi sử dụng các hình thức khuyến mại gọi nội mạng (như gói tỷ phú của Beeline).
- Chặn 1 chiều – trong những tình huống có thể phát sinh cuộc gọi ngoài ý muốn (như khi người khác mượn xem điện thoại hay trẻ con lấy chơi).
- 3. Đánh giá tính khả thi
Đây là những yêu cầu rất cụ thể và rất Việt Nam, có thể được nhìn thấy qua các đặc điểm:
- Có thể mang lại lợi ích thực tế cho người dùng (lợi ích tính bằng tiền).
- Có thể có thể trở thành ứng dụng thường xuyên, gắn bó lâu dài với người dùng.
- Có thể thiết kế để phù hợp với đặc thù của các mạng viễn thông di động ở Việt Nam.
Từ đó có thể thấy ý tưởng có tính khả thi cao, bởi hiện tại chưa có ứng dụng nào có chức năng tương tự.
- 4. Phát triển chức năng
- Chức năng tính tổng cước phát sinh & hiển thị tổng hợp cước: Hiển thị tổng số cuộc gọi, tổng số tin nhắn, tổng số phút gọi và tổng tiền cước phát sinh
- Chức năng tính cước cho mỗi cuộc gọi đi & hiển thị chi tiết cước: Hiển thị danh sách chi tiết các cuộc gọi đi và giá cước
- Chức năng thiết lập hạn mức & đưa ra cảnh báo: Cảnh báo người dùng (bằng dialog message, virba, đèn led hoặc âm thanh) khi cuộc gọi vượt quá khoảng thời gian khai báo. Cảnh báo người dùng khi tổng mức cước vượt quá khai báo.
- Chức năng chặn cuộc gọi đi: Chặn 1 chiều, chặn gọi ngoài mạng, chặn gọi quốc tế
Kinh doanh với Android
Cách đưa ứng dụng của bạn lên market – Publishing on Android Market
Để đưa ứng dụng lên Android Market, bạn phải đăng kí một account với google (phí ~ 50$/năm).
Nguồn thu chính từ các ứng dụng này là tiền bán bản quyền và tiền quảng cáo.
- Số tiền bản quyền thu được từ người mua, bạn sẽ được ăn chia với google theo tỷ lệ 50/50.
- Tiền thu từ quảng cáo (nếu ứng dụng của bạn có quảng cáo) thì sẽ được google tính theo tỷ lệ hiển thị, tỷ lệ click và nhân với đơn giá nhất định.
Post a Comment Blogger Facebook
Post a Comment