YOMEDIA
ADSENSE
ANDROID_3
52
lượt xem 5
download
lượt xem 5
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
1.7.13. Activity & Intend 1.7.2.1. Activity Activity là một thành chớnh của một ứng dụng Android, được dựng để hiển thị một màn hỡnh và nắm bắt cỏc hoạt động xảy ra trờn màn hỡnh đú.
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: ANDROID_3
- ANDROID 1.7.13. Activity & Intend 1.7.2.1. Activity Activity là một thành chớnh của một ứng dụng Android, được dựng để hiển thị một màn hỡnh và nắm bắt cỏc hoạt động xảy ra trờn màn hỡnh đú. Khi làm việc với Activity cần nắm bắt được một số kiến thức cơ bản như sau: v Chu kỳ sống của một Activity (Xem chu kỳ ứng dụng của Android mục 1.6) v Tạo menu và dialog v Khởi động một Activity Để khởi động một Activity ta sử dụng Intend sẽ tỡm hiểu kỹ hơn ở phần b. Tuy nhiờn, trong phần này tụi sẽ hướng dẫn cỏch chuyển giữa cỏc Intend theo 2 loại: Khai bỏo khụng tường minh: Cung cấp chớnh xỏc thụng tin của activity cần gọi bằng cỏch truyền vào tờn class của Activity đú VD: Từ Activity A mu ốn chuyển qua Activity B ta khai bỏo một Intend trong Activity A: Intend intend = new Intend(this, B.class); startActivity(intend); Khai bỏo khụng tường minh Cung cấp cỏc thao tỏc cần làm gỡ với loại dữ liệu nào, hệ thụng sẽ tỡm đến activity tương ứng để khởi động. VD: Để xem thụng tin một contact nào đú trong Activity của ứng dụng Contact trong Android ta chỉ đến dữ liệu contact và chỉ đến Activity View contact như sau: Intent i = new Intent(); i.setAction(Intent.ACTION_VIEW); i.setData(Uri.withAppendedPath( android.provider.Contacts.People.CONTENT_URI, "1)); startActivity(i); v Tớnh liờn lạc giữa 2 activity Khi chuyển sang một Activity khỏc ta cú thể gửi kốm dữ liệu trong intend đú như sau: intend.putExtra(“key1”, “value1”); intend.putExtra(“key2”, 23); Bờn phớa Activity được khởi động hay được chuyển đế n, cú thể lấy dữ liệu được gửi như sau:
- getIntend().getExtra().getString( “key1”); getIntend().getExtra().getInt(“key2”); v Task Android là một hệ điều hành đa tiến trỡnh. Khi lập trỡnh trờn nền tảng Android thỡ tiến trỡnh là một vấn đề cần phải được chỳ ý nhiều nhất. Mặc dự Android hỗ trợ đa tiến trỡnh nhưng trờn một thiết bị di động với cấu hỡnh thấp mà chỳng ta quỏ lạm dụng tiến trỡnh thỡ sẽ rất tốn bộ xử lý điều này cũng đồng nghĩa với việc bạn đang biến ứng dụng của bạn trở thành một thứ phần mềm tiờu thụ điện năng. 1.7.2.2. Intent v Khỏi niệm Intend: ỹ Là một cấu trỳc dữ liệu mụ tả cỏch thức, đối tượng thực hiện của một Activity ỹ Là cầu nối giữa cỏc Activity: ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những cụng việc khỏc nhau. Intent chớnh là người đưa thư, giỳp cỏc Activity cú thể triệu gọi cũng như truyền cỏc dữ liệu cần thiết tới một Activity khỏc. Điều này cũng giống như việc di chuyển qua lại giữa cỏc Forms trong lập trỡnh Windows Form. Hỡnh 1-19 Truyền dữ liệu giữa 2 Activity v Dữ liệu của Intend: ỹ Intent về cơ bản là một cấu trỳc dữ liệu, được mụ tả trong lớp android.content.Intent ỹ Cỏc thuộc tớnh của một đối tượng Intend: Hỡnh 1-20 Cỏc thuộc tớnh của Intend ỉ Cỏc Action được định nghĩa sẵn:
- Dưới đơy là những hằng String đú được định nghĩa sẵn trong lớp Intent. Đi kốm với nú là cỏc Activity hay Application được xơy dựng sẵn sẽ được triệu gọi mỗi khi Intent tương ứng được gửi (tất nhiờn khi được cung cấp đỳng data). VD: Gọi tới một số điện thoại: Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:123456")); startActivity(dialIntent); Hỡnh 1-21 Cỏc Action đú được định nghĩa sẵn trong Intend 1.7.14. CONTENT PROVIDER VÀ URI Trong hệ thống Android tất cả cỏc tài nguyờn ngư Contact, SMS,… đều được lưu trữ vào CSDL SQLite của hệ thống. Cũng như cỏc CSDL khỏc, CSDL mà hệ thống Android sử dụng để lưu trữ thụng tin cũng cho phộp chỳng ta truy vấn dữ liệu như một CSDL MSSQL thụng thường. Tuy nhiờn, trong hệ thống đú chỳng ta khụng cần phải thao tỏc bằng lệnh SQL nhiều để truy xuất dữ liệu mà thay vào đú Android đú được trang bị một API cho phộp người lập trỡnh cỳ thể dễ dàng truy xuất dữ liệu. Đú gọi là ContentProvider. ContentProvider cung cấp cho chỳng ta một đối tượng con trỏ giỳp chỳng ta cú thể dễ dàng lấy được bất cứ dữ liệu lưu trữ nào chỉ cần cung cấp một đường dẫn đỳng đến dữ liệu đú. Đường dẫn này cũn được gọi là Uri. Tạo một Uri: Uri uri = Uri.parse(“content://com.android.contacts/contacts ”); Cấu trỳc gồm cú 4 phần chớnh như sau: Phần A: Đơy là tiền tố chỉ ra dữ liệu được điều khiển bởi Content Provider và nú khụng bao giờ thay đổi.
- Phần B: Phần này chỉ đến nơi lưu trữ dữ liệu. Cũng giống như cấu trỳc của một số điện thoại thỡ cỏi này cỳ thể hỡnh dung nỳ như là mú quốc gia hoặc cũng cỳ thể coi nỳ như là tờn của CSDL. Phần C: Phần này chỉ ra loại dữ liệu. Chẳng hạn như, dữ liệu contact, dữ liệu SMS,… Phần này cú thể coi nú như là tờn của một table Phần D: Phần này chỉ đến đỳng vị trớ của dữ liệu, cú thể coi phần này như là ID của row trong table hoặc một dữ liệu nào đú dựng để truy vấn. VD: Uri chỉ đến contact thứ 0 trong CSDL là content://contacts/people/0 Để cú thể thực hiện truy vấn đến vựng dữ liệu được chỉ ra bởi một Uri ta cần cú 2 đối tượng con trỏ được cung cấp bởi Activity đú là: Cursor và ContentResolver. Để lấy được 2 đối tượng này thỡ trong Activity sử dụng hàm getContentResolver() trả về đối tượng ContentResolver. getContentResolver().query(Uri uri); trả về đối tượng Cursor. 1.7.15. Background Service Service là 1 trong 4 thành phần chớnh trong 1 ứng dụng Android (Activity, Service, BroadcastReceiver, ContentProvider) thành phần này chạy trong hậu trường và làm những cụng việc khụng cần tới giao diện như chơi nhạc, download, xử lớ tớnh toỏn… Một Service cú thể được sử dụng theo 2 cỏch: Nú cú thể được bắt đầu và được cho phộp hoạt động cho đến khi một người nào đú dừng nú lại hoặc nú tự ngắt. Ở chế độ này, nú được bắt đầu bằng cỏch gọi Context.startService() và dừng bằng lệnh Context.stopService(). Nú cú thể tự ngắt bằng lệnh Service.stopSelf() hoặc Service.stopSelfResult(). Chỉ cần một lệnh stopService() để ngừng Service lại cho dự lệnh startService() được gọi ra bao nhiờu lần. Service cú thể được vận hành theo như đú được lập trỡnh việc sử dụng một Interface mà nỳ định nghĩa. Cỏc người dựng thiết lập một đường truyền tới đối tượng Service và sử dụng đường kết núi đú để thơm nhập vào Service. Kết nối này được thiết lập bằng cỏch gọi lệnh Context.bindService() và được đúng lại bằng cỏch gọi lệnh Context.unbindService(). Nhiều người dựng cú thể kết nối tới cựng một thiết bị. Nếu Service vẫn chưa được khởi chạy, lệnh bindService() cú thể tựy ý khởi chạy nú. Hai chế độ này thỡ khụng tỏch biệt toàn bộ. Bạn cỳ thể kết nối với một Service mà nỳ đú được bắt đầu với lệnh startService(). Vớ dụ, một Service nghe nhạc ở chế độ nền cú thể được bắt đầu bằng cỏch gọi lệnh startService() cựng với một đối tượng Intent mà định dạng được ơm nhạc để chơi. Chỉ sau đú, cú thể là khi người sử dụng mu ốn kiểm soỏt trỡnh chơi nhạc hoặc biết thờm thụng tin về bài hỏt hiện tại đang chơi, thỡ sẽ cỳ một Activity tạo lập một đường truyền tới Service bằng cỏch gọi bindService(). Trong trường hợp như thế này, stopService() sẽ khụng thực sự ngừng Service cho đến khi liờn kết cuối cựng được đúng lại.
- Giống như một Activity, một Service cũng cú cỏc phương thức chu kỳ thời gian mà bạn cú thể cài đặt để kiểm soỏt những sự thay đổi trong trạng thỏi của nú. Service chỉ cú 3 phương thức được gọi đến trong chu trỡnh sống là: void onCreate() void onStart(Intent intent) void onDestroy() Bằng việc thực hiện những phương thức này, bạn cú thể giỏm sỏt 2 vũng lặp của chu kỳ thời gian của mỗi Service Entire lifetime của một Service diễn ra giữa thời gian onCreate() được gọi ra và thời gian mà onDestroy() trả lại. Giống như một Activity, một Service lại tiết hành cài đặt ban đầu ở onCreate(), và giải phúng tất cả cỏc tài nguyờn cũn lại ở onDestroy() Vớ dụ, một Service phỏt lại nhạc cỳ thể tạo ra một luồng và bắt đầu chơi nhạc onCreate(),và sau đú luồng chơi nhạc sẽ dừng lại ở onCreate(), Active lifetime của một Service bắt đầu bằng một lệnh tới onStart(). Đơylà phương thức được chuyển giao đối tượng Intent mà đú được thụng qua để tới startService() Service ơm nhạc sẽ mở đối tượng Intent để quyết định xem sẽ chơi loại nhạc nào và bắt đầu phỏt nhạc. Khụng cú callback tương đương nào cho thời điểm Service ngừng lại – khụng cú phương thức onStop(). Cỏc phương thức onCreate() và onDestroy() được gọi cho tất cả cỏc Service dự chỳng cú được bắt đầu bằng Context.startService() hoặc Context.bindService() hay khụng. Tuy nhiờn, onStart() chỉ được gọi ra đối với cỏc Service bắt đầu bằng startService(). Nếu một Service cho phộp những Service khỏc kết nối với nú thỡ sẽ cỳ thờm cỏc phương thức callback dành cho Service đú để thực hiện. IBinder onBind(Intent intent) boolean onUnbind(Intent intent) void onRebind(Intent intent) Hàm callback onBind() thụng qua đối tượng Intent đú đựoc truyền đến bindService và onUnbind() được chuyển giao đối tượng mà đú được chuyển đến. Nếu Service đang được chỉ định (binding), onBind() quay trở lại kờnh thụng tin mà người dựng sử dụng để tương tỏc với Service. Phương thức onUnbind() cú thể yờu cầu onRebind() được gọi nếu một người dựng kết nối với Service.
- Biểu đồ dưới đơy minh họa cho cỏc phương thức callback giành cho một Service. Hỡnh 1-22 Chu trỡnh sống của một Service Mặc dự, nú phơn tỏch cỏc Service được tạo ra thụng qua startService với cỏc Service mà được tạo ra bằng bindService(). Húy nhớ rằng bất kỡ Service nào, cho dự nỳ được khởi tạo như thế nào thỡ nỳ vẫn cỳ thể cho phộp cỏc người dựng kết nối tới nú một cỏch hiệu quả nhất, cho nờn bất kỡ Service nào cũng cỳ thể được chỉ định thụng qua cỏc cỏc phương thức onBind()và onUnbind(). Để hiểu hơn về Service chỳng ta húy làm một vớ dụ nhỏ sau: Đầu tiờn, mở file AndroidManifest.xml và tạo một tham chiếu đến class Service Tiếp theo, tạo một file MyService.java kế thừa từ class Service: Trong file MyService.java bắt buộc phải override phương thức: public Ibinder onBinder(Intend intent); Để cú thể start và stop Service thỡ cũng cần override 2 phương thức là: protected void onCreate(); protected void onDestroy(); Thờm một biến toàn cục: private Timer timer = new Timer(); Timer thực chất cũng là một Thread. Việc bạn sử dụng Timer và Thread hoàn toàn khụng cỳ sự khỏc biệt gỡ. Biến Timer này sẽ được cài đặt vào bờn trong hàm onCreate như sau: timer.scheduleAtFixedRate( new TimerTask() { public void run() { //Do somthing }
- }, 0, 5000); Khi mu ốn dừng Service lại thỡ chỉ cần huỷ Thread Timer bằng hàm timer.cancel(); Cuối cựng là khởi động Service từ Activity: Intent svc = new Intent(this, MyService.class); startService(svc, Bundle.EMPTY); 1.7.16. Telephony Telephony là một trong 4 thành phần chớnh của một hệ thống Android. Nú cho phộp người lập trỡnh cỳ thể lấy cỏc thụng tin của hệ thống như thụng tin SIM, thụng tin thiết bị, thụng tin mạng,… Ngoài ra, chỳng ta cũng cú thể cài đặt cỏc thụng số cho thiết bị nếu cỏc thụng số đú cú thể thay đổi được. Tất cả những điều đú được quản lý bởi một class TelephonyManager trong Android. TelephonyManager telMan = (TelephonyManager)getSystemService(Context.TELEPHONY_SEVICE); Vd: v Lấy thụng tin ID thiết bị telMan.getDeviceId(); v Lấy thụng tin số serial SIM telMan.getSimSerialNumber(); 1.7.17. SQLITE SQLite là một dạng CSDL tương tự như Mysql, PostgreSQL... Đặc điểm của SQLite là gọn, nhẹ, đơn giản. Chương trỡnh gồm 1 file duy nhất vỏn vẹn chưa đến 500kB, khụng cần cài đặt, khụng cần cấu hỡnh hay khởi động mà cú thể sử dụng ngay. Dữ liệu database cũng được lưu ở một file duy nhất. Khụng cú khỏi niệm user, password hay quyền hạn trong SQLite database. SQLite khụng thớch hợp với những hệ thống lớn nhưng ở quy mụ vừa tầm thỡ SQLite phỏt huy uy lực và khụng hề yếu kộm về mặt chức năng hay tốc độ. Với cỏc đặc điểm trờn SQLite được sử dụng nhiều trong việc phỏt triển, thử nghiệm v..v.. và là sự lưa chọn phự hợp cho những người bắt đầu học database. Hiện nay thỡ SQLite đú được ứng dụng vào smartphone như iPhone và Android để lưu trữ dữ liệu. Để cú thể dễ dàng thao tỏc với SQLite chỳng ta cú thể sử dụng trỡnh duyệt FireFox và tải về plugin SQLite tại link sau: http://code.google.com/p/sqlite-manager/ Sau khi tải về file xpi, kộo file này vào cửa sổ firefox để cài đặt plugin.
- Sau khi cài đặt plugin xong thỡ vào Menu_tools trong firefox sẽ cỳ chức năng SQLite Manager. Giao diện của SQLite manager trong firefox như sau: Hỡnh 1-23 SQLite Manager 1.7.18. ANDROID & WEBSERVICE 1.7.18.1. Khỏi niệm Web service và SOAP Webservice là một dịch vụ cung cấp cơ chế triệu gọi cỏc đối tượng từ xa thụng qua giao thức HTTP cựng với cơ chế truyền tải định dạng đối tượng theo cụng nghệ XML. Chớnh vỡ sử dụng giao thức HTTP của Web nờn giờ đőy cỏc lời gọi trở nờn đơn giản và thụng qua được cỏc rào cản về tường lửa. Để đảm bảo điều này, một giao thức mới là SOAP (Simple Object Access Protocol) ra đời để hỗ trợ cho Web services. SOAP được định nghĩa dựa trờn giao thức chuẩn HTTP, SOAP cho phộp dữ liệu chuyển đi bằng HTTP và định dạng theo chuẩn XML. Cỏc lời gọi hàm tham số truyền hàm, dữ liệu trả về từ hàm, tất cả đều được chuyển sang dạng XML và cú thể dễ dàng xử lý bởi tất cả cỏc ngụn ngữ. Một thế mạnh khỏc đú là nếu cỏc đối tượng phơn tỏn xơy dựng trờn mụ hỡnh Web services sẽ cỳ thể triệu gọi lẫn nhau, bất chấp đối tượng đú được viết trờn ngụn ngữ Java của Sun hay .NET của Microsoft. Hiện tại, SOAP được coi là một sự thay đổi lớn kể từ khi COM, RMI, CORBA ra đời. 1.7.18.2. Giới thiệu về XStream XStream là một cụng cụ giỳp chuyển cỏc đối tượng hay những thể hiện của những lớp Java qua dạng XML hay ngược lại. Nú là một mú nguồn mở, được thiết lập từ thỏng giờng năm 2004. Trong một đề ỏn IT đụi khi bạn cần phải chuyển cỏc đối tưọng của cỏc lớp Java cú chứa thụng tin và đưa nú qua dạng XML. Việc làm này để giỳp mang thụng tin từ hệ thống này qua hệ thống khỏc bằng những gúi hay tập tin XML
- (giả sử cỏc hệ thống này viết bằng ngụn ngữ Java). Nú cũng giỳp bạn trỏnh được nhiều phiền toỏi như cỏch sắp đặt chuyển kiểu cho hai dữ liệu giữa hai hệ thống. Do đú dựng dạng XML như là phương tiện trao đổi dữ liệu giữa hai hệ thống là cỏch hữu hiệu nhất. Sau khi hệ thống đú nhận được dữ liệu nằm ở dạng XML rồi, thỡ việc kế tiếp là người lập trỡnh chỉ chuyển chỳng về cỏc đối tượng Java để phự hợp với ngụn ngữ mà hệ thống đú đang dựng. Cụng cụ XStream giỳp bạn thực hiện được giải phỏp vừa núi ở trờn. Nếu bạn khụng dựng XML như là phương tiện trao đổi dữ liệu, thỡ trong Java cũng cỳ cỏch đưa đối tượng Java từ nơi này sang nơi khỏc là dựng Serialize. Bài này khụng núi đến Serialize, mà chỉ núi đến cụng cụ XStream. Tất nhiờn, ngoài XStream ra cũng cú một cụng cụ nữa cú chức năng tương cũn được biết đến với cỏi tờn Castor. Thư viện XStream cú thể tải tại http://xstream.codehaus.org/index.html Cỏch sử dụng thư viện XStream: v Tạo class PhoneNumber: public class PhoneNumber { private int code; private String number; PhoneNumber(int code, String number){ this.code = code; this.number = number; } public int getCode() {return code;} public void setCode(int code) {this.code = code;} public String getNumber() {return number;} public void setNumber(String number) {this.number = number;} } v Tạo class Person: public class Person { private String firstName; private String lastName; private PhoneNumber phone; private PhoneNumber fax; Person(String firstName, String lastName){ this.firstName = firstName; this.lastName = lastName; } public String getFirstName() {return firstName;} public void setFirstName(String firstName) { this.firstName = firstName;
- } public String getLastName() {return lastName;} public void setLastName(String lastName) { this.lastName = lastName; } public PhoneNumber getPhone() {return phone;} public void setPhone(PhoneNumber phone) { this.phone = phone; } public PhoneNumber getFax() {return fax;} public void setFax(PhoneNumber fax) {this.fax = fax;} } v Tạo class TestXStream: import com.thoughtworks.xstream.XStream; public class TestXStream { public static void main(String[] args) { XStream xstream = new XStream(); Person joe = new Person("Joe", "Walnes"); joe.setPhone(new PhoneNumber(110, "111-111-1111")); joe.setFax( new PhoneNumber(220, "222-221-2222")); String xml = xstream.toXML(joe); System. out.println("xml output:\n"+ xml); Person newJoe = (Person)xstream.fromXML(xml); //Xem thuộc tớnh trong biến số newJoe thuộc lớp Person System. out.println("\nIn ra thụng tin của biến newJoe với First Name, Last Name and Phone:\n "); System.out.println("First Name: " + newJoe.getFirstName()); System. out.println("Last Name: " + newJoe.getLastName()); System.out.println("Phone: " + newJoe.getPhone().getNumber()); } } Kết Quả: Khi ta cho chạy thử chương trỡnh TestXStream.java, kết quả thu được là một dạng XML được tạo ra mà trong đú nú cú cấu trỳc chỉ sự liờn hệ giữa Person và PhoneNumber như sau: Cho ra dạng xml là: Joe Walnes
- 110 111-111-1111 220 222-221-2222
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn