SlideShare une entreprise Scribd logo
1  sur  82
Télécharger pour lire hors ligne
Tìm hiểu lập trình trên Android




                                                                     Mục lục
                                                                           

Chương 1.               GIỚI THIỆU ANDROID .............................................................................................................5
  1.1      Khái niệm về Android: ...........................................................................................................................5
      1.1.1        Android khác với các hệ điều hành chạy trên thiết bị di động khác ........5
      1.1.2        Đặc tính mở của Android:..........................................................................................................6
  1.2      Kiến trúc của Android:...........................................................................................................................6
      1.2.1        Android Platform: ............................................................................................................................7
      1.2.2        Tầng Linux Kernel: ..........................................................................................................................7
      1.2.3        Native Libraries: ...............................................................................................................................7
      1.2.4        Tầng Runtime: ....................................................................................................................................8
      1.2.5        Tầng Application Framework: ...............................................................................................8
Chương 2.               MÔI TRƯỜNG LẬP TRÌNH.................................................................................................10
  2.1      Giới thiệu:......................................................................................................................................................10
  2.2      Android SDK: ..............................................................................................................................................10
  2.3      Máy ảo Dalvik: ...........................................................................................................................................11
  2.4      Các gói Java cần thiết: ..........................................................................................................................11
  2.5      Thành phần chính của Eclipse khi tạo ứng dụng trên Android: ........................12
  2.6      Thành phần quan trọng trong một Android Project: .................................................13
  2.7      Chu kỳ sống của ứng dụng Android .........................................................................................13
      2.7.1        Chu kỳ sống thành phần...........................................................................................................14
      2.7.2        Activity Stack ....................................................................................................................................14
      2.7.3        Các trạng thái của chu kỳ sống............................................................................................15
      2.7.4        Chu kỳ sống của ứng dụng .....................................................................................................15
      2.7.5        Các sự kiện trong chu kỳ sống của ứng dụng ..........................................................16
      2.7.6        Thời gian sống của ứng dụng...............................................................................................16
      2.7.7        Thời gian hiển thị của Activity ............................................................................................17
      2.7.8        Các hàm thực thi ............................................................................................................................17
  2.8      Các công cụ cần thiết để lập trình trên Android và hư ớng dẫn cài đặt:.......17
      2.8.1        Các công cụ cần thiết để lập trình: ...................................................................................17
      2.8.2        Các bước cài đặt .............................................................................................................................17
  2.9 Bắt đầu lập trình 1 chương trình hello world đầu tiên: ...........................................20
  2.10  Thành phần giao diện Android................................................................................................23



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                                                                                                    1
Tìm hiểu lập trình trên Android


    2.10.1           View ....................................................................................................................................................23
    2.10.2           VIEWGROUP: ...............................................................................................................................23
  2.11      Các Control ..............................................................................................................................................26
    2.11.1           BUTTON...........................................................................................................................................26
    2.11.2           LISTVIEW .......................................................................................................................................27
    2.11.3           EDITTEXT.......................................................................................................................................29
    2.11.4           TEXTVIEW .....................................................................................................................................30
    2.11.5           CHECKBOX.....................................................................................................................................30
    2.11.6           MENUOPTION .............................................................................................................................31
    2.11.7           CONTEXTMENU.........................................................................................................................32
  2.12      Tùy biến control (custom control):......................................................................................32
  2.13      Ví dụ sử dụng Listview...................................................................................................................35
Chương 4.            LẬP TRÌNH TRÊN ANDROID ...........................................................................................38
  4.1    Giới Thiệu Intents: .................................................................................................................................38
    4.1.1        Thành phần Intents:....................................................................................................................38
    4.1.2        Sử dụng Intents khởi động cho Activities: ................................................................39
    4.1.3        Intent không tường minh thực thi Activity: .............................................................40
    4.1.4        Intent tường minh thực thi Activity ...............................................................................40
    4.1.5        Sử dụng Intents gửi đi thông điệp ra ngoài ứng dụng hoặc Activity:...41
  4.2    Giới Thiệu Adapters: ............................................................................................................................43
    4.2.1        Một số Adapter : .............................................................................................................................43
    4.2.2        Sử dụng Adapter hiển thị dữ liệu: ....................................................................................43
  4.3    Ví dụ sử dụng Intent để liên lạc giữa các Activity:........................................................44
  4.4    Kỹ thuật lưu trữ dữ liệu trong Android.................................................................................46
  4.5    Lưu trữ dữ liệu ứng dụng một cách đơn giản: .................................................................47
    4.5.1        Tạo và lưu dữ liệu với Share Preferences: ................................................................47
    4.5.2        Truy xuất Shared Preferences.............................................................................................47
  4.6    Lưu và đọc các tập tin trong Android: ....................................................................................49
    4.6.1        Truy xuất các tập tin trong Resources: ........................................................................50
    4.6.2        Các công cụ quản lý tập tin ....................................................................................................50
  4.7    Cơ sở dữ liệu trong Android...........................................................................................................50
    4.7.1        Giới thiệu SQLite: ..........................................................................................................................51
    4.7.2        Cursors và Content Values: ...................................................................................................51
    4.7.3        Sử dụng SQLiteOpenHelper:.................................................................................................52
    4.7.4        Truy xuất và tạo Cơ sở dữ liệu không dùng SQLiteHelper:..........................52



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                                                                                                      2
Tìm hiểu lập trình trên Android


    4.7.5       Truy vấn cơ sở dữ liệu ..............................................................................................................52
    4.7.6       Lấy kết quả từ Cursors ..............................................................................................................53
    4.7.7       Thêm, cập nhật và xóa dòng:................................................................................................53
    4.7.8       Thao tác trên cơ sở dữ liệu Android ..............................................................................54
    4.7.9       Giới thiệu Content Providers ...............................................................................................56
  4.8    Một ứng dụng Demo sử dụng ContentProvider để quản lý sách: .....................59
  4.9    Maps, Geocoding, Location Based Services.......................................................................59
    4.9.1       Sử dụng dịch vụ định vị ............................................................................................................59
    4.9.2       Cài đặt trên môi trường giả lập với Test Providers ...........................................59
    4.9.3       Cập nhật vị trí với Emulator Location Providers .................................................59
    4.9.4       Chọn một Location Provider ................................................................................................60
    4.9.5       Tìm một Providers có sẵn.......................................................................................................60
    4.9.6       Tìm kiếm một Provider theo tiêu chí ............................................................................61
    4.9.7       Tìm một địa chỉ (Finding Your Location)...................................................................61
    4.9.8       Theo dõi sử di chuyển (Tracking Movement) ........................................................62
    4.9.9       Sử dụng Goecoder.........................................................................................................................63
    4.9.10        Reverse Geocoding..................................................................................................................63
    4.9.11        Forward Geocoding ................................................................................................................64
    4.9.12        Dùng MapView ...........................................................................................................................65
    4.9.13        Dùng MapActivity ....................................................................................................................66
    4.9.14        Sử dụng Overlay ........................................................................................................................67
    4.9.15        Dùng MapController ..............................................................................................................68
    4.9.16        Chú ý khi tạo một ứng dụng có sử dụng MapView ........................................69
  4.10      Làm việc trên Background.........................................................................................................70
    4.10.1          Giới Thiệu Services .................................................................................................................70
    4.10.2          Tạo Service ....................................................................................................................................71
    4.10.3          Khởi chạy, điều khiển và tương tác với Sercice ...............................................71
    4.10.4          Kết nối Activities với Services........................................................................................72
    4.10.5          Giới thiệu Thông báo trong Android.........................................................................74
    4.10.6          Giới thiệu Notification Manager ...................................................................................74
    4.10.7          Tạo thông báo .............................................................................................................................75
    4.10.8          Kích hoạt thông báo ...............................................................................................................76
  4.11      Sử dụng các Media APIs ................................................................................................................76
    4.11.1          Chơi nhạc ........................................................................................................................................77
    4.11.2          Ghi âm ...............................................................................................................................................78
  4.12      Sử dụng máy ảnh ................................................................................................................................79




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                                                                                                  3
Tìm hiểu lập trình trên Android


    4.12.1          Cài đặt điều khiển camera .................................................................................................80
    4.12.2          Sử dụng máy ảnh ......................................................................................................................80
    4.12.3          Chụp ảnh ........................................................................................................................................81
Chương 5.           TỔNG KẾT ......................................................................................................................................82
  5.1   Kết quả đạt được:....................................................................................................................................82
  5.2   Hướng phát triển của đề tài: ..........................................................................................................82
  5.3   Tài liệu tham khảo: ................................................................................................................................82




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                                                                                             4
Tìm hiểu lập trình trên Android


                    Chương 1. GIỚI THIỆU ANDROID
       Như chúng ta biết, hiện tại đã có hơn nửa nhân loại sử dụng máy di động để
thoại và giao tiếp qua các mạng không dây. Con số 3 tỉ người này sẽ còn tăng lên và
máy di động càng ngày càng "thông minh" với nhiều chức năng và dịch vụ rất hấp dẫn,
cho nên thị trường máy di động thông minh sẽ vượt xa máy vi tính trong một tương lai
rất gần... Vì thế việc lập trình trên thiết bị di động ngày càng phổ biến và phát triển rất
mạnh mẽ. Từ nền tảng mã nguồn mở, Google đã cho ra mắt Android chạy trên các
thiết bị di động. Android có rất nhiều công cụ và dụng cụ miễn phí để nghiên cứu và
phát triển phần mềm trên nền tảng của nó. Tài liệu này sẽ giúp chúng ta tìm hiểu về
Android và cách viết một ứng dụng trên nền tảng này.

1.1 KHÁI NIỆM VỀ ANDROID:
     Trước hết Android là nền tảng phần mềm dựa trên mã nguồn mở Linux OS
(Kernel 2.6) cho máy di động và những phần mềm trung gian (middleware) để hổ trợ
các ứng dụng mà người sử dụng cần đến. Một cách định nghĩa không quá chuyên môn
thì có thể coi Android là tên một nền tảng mở cho thiết bị di động của Google (gồm hệ
điều hành, middleware và một số ứng dụng cơ bản). Android sẽ đương đầu với một số
hệ điều hành (viết tắt là HDH) dành cho thiết bị di dộng khác đang hâm nóng thị
trường như Windows Mobile, Symbian và dĩ nhiên là cả OS X (iPhone).
     Có thể nói một cách nôm na rằng Android là một HDH chạy trên thiết bị di động,
cũng giống như Windows, Linux hay Mac chạy trên máy vi tính vậy.

       1.1.1 Android khác với các hệ điều hành chạy trên thiết bị di động khác
              Android đã thu hút được sự chú ý của giới công nghệ khắp toàn cầu khi
       đứa con của Google sử dụng giấy phép mã nguồn mở. Đó là một sản phẩm kết
       tinh từ ý tưởng của Khối Liên minh thiết bị cầm tay mở do Google dẫn đầu,
       gồm 34 thành viên với các công ty hàng đầu về công nghệ và di động toàn cầu
       như Qualcomm, Intel, Motorola, Texas Instruments và LG Electronics, các nhà
       mạng như T-Mobile, Sprint Nextel, NTT DoCoMo và China Mobile.
              Các nhà phát triển có thể sử dụng miễn phí bộ Kit Android Software
       Development để xây dựng các ứng dụng của mình.




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                  5
Tìm hiểu lập trình trên Android


      1.1.2 Đặc tính mở của Android:
            Android được xây dựng để cho phép các nhà phát triển để tạo ra các ứng
      dụng di động hấp dẫn, tận dụng tất cả tính năng một chiếc điện thoại đã cung
      cấp. Nó được xây dựng để được thực sự mở. Ví dụ, một ứng dụng có thể gọi bất
      kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin nhắn văn bản,
      hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra nhiều
      ứng dụng phong phú hơn cho người dùng (điều này hiện chưa có trên Windows
      Phone7 của Microsoft). Android được xây dựng trên mã nguồn mở Linux
      Kernel. Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh được thiết kế để tối ưu hóa
      bộ nhớ và tài nguyên phần cứng trong một môi trường di động.
            Android không phân biệt giữa các ứng dụng lõi của điện thoại và các
      ứng dụng của bên thứ ba. Tất cả có thể được xây dựng để có thể truy cập bằng
      khả năng của một thiết bị di động cung cấp cho người sử dụng với một dải rộng
      các ứng dụng và dịch vụ. Với các thiết bị xây dựng trên Android, người dùng
      có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ. Với Android, một
      nhà phát triển có thể xây dựng một ứng dụng cho phép người dùng xem vị trí
      của bạn bè của họ và được cảnh báo khi họ đang có trong vùng phụ cận cho họ
      một cơ hội để kết nối.
            Android cung cấp truy cập đến một loạt các thư viện công cụ hữu ích và
      có thể được sử dụng để xây dựng các ứng dụng phong phú. Ví dụ, Android cho
      phép các thiết bị giao tiếp với nhau tạo điều kiện cho đồng đẳng rich-to-peer
      trong ứng dụng xã hội. Ngoài ra, Android bao gồm một tập hợp đầy đủ công cụ
      đã được xây dựng công phu, với việc cung cấp nền tảng phát triển, với năng
      suất cao và cái nhìn sâu vào các ứng dụng .

1.2 KIẾN TRÚC CỦA ANDROID:
     "Understanding Android" là cách mà ta tiếp cận lập trình Android và thấu hiểu
kiến trúc hệ thống của nó. Chúng ta có thể không cần hiểu rõ cấu trúc của một HDH
nhưng Chúng ta vẫn có thể lập trình một ứng dụng trên HDH đó, đây là điều mà nhà
sản xuất muốn khi release SDK với một framework có sẵn của họ. Như chúng ta biết
điều này cũng có mặt tốt và xấu. Framework là một tầng cao cấp dành cho lập trình



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                           6
Tìm hiểu lập trình trên Android


viên, nó đều có giới hạn của nó, chúng ta có thể chỉ có thể lập trình những ứng dụng
phổ biến nhưng không nên tiến tới những ứng dụng cao cấp đi sâu vào hệ thống của
HDH. Theo cách của mình, trước khi bắt đầu học Android, chúng ta nên nghiên cứu
qua bản thân HDH Android, chúng ta không cần phải hiểu rõ nó như thể nào, mục đích
quan trọng nhất của chúng ta là có cái nhìn chung và toàn diện nhất về Android.

      1.2.1 Android Platform:
             Bao gồm HDH Android đầy đủ tính năng, các ứng dụng và các tầng
      trung gian để developer có thể mở rộng, tùy chỉnh hoặc thêm vào các
      component của họ.
             Có 4 tầng cơ bản trong HDH Android: Application Framework, Android
      Runtime, Native Libraries, Linux Kernel ... Mỗi tầng làm việc đều nhờ sự giúp
      đỡ của tầng bên dưới.

      1.2.2 Tầng Linux Kernel:
             Đây là nhân của HDH Android, mọi xử lý của hệ thống đều phải thông
      qua tầng này. Linux Kernel cung cấp các trình điều khiển thiết bị phần cứng
      (driver) như: camera, USB, Wifi, Bluetooth, Display, Power Management ...
      Android dựa trên Linux phiên bản 2.6 lựa chọn các tính năng cốt lõi như bảo
      mật, quản lý bộ nhớ, quản lý tiến trình, mạng stack và các trình điều khiển phần
      cứng. Kernel hoạt động như một lớp trừu tượng giữa phần cứng và phần mềm
      còn lại của hệ thống.

      1.2.3 Native Libraries:
       System C library - có nguồn gốc từ hệ thống thư viện chuẩn C (libc), điều
          chỉnh các thiết bị nhúng trên Linux.
       Media Libraries - mở rộng từ PacketVideo's OpenCORE; thư viện hỗ trợ
          playback và recording của nhiều định dạng video và image phổ biến:
          MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
       Surface Manager - quản lý việc hiển thị và kết hợp đồ họa 2D và 3D.




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                             7
Tìm hiểu lập trình trên Android


      LibWebCore - Android dùng lại webkit engine cho việc render trình duyệt
         mặc định của HDH Android browser và cho dạng web nhúng (như HTML
         nhúng)
      SGL - 2D engine
      3D libraries - Thư viện 3D dựa trên OpenGL ES 1.0 API, có nâng cấp tăng
         tốc "hardware 3D acceleration"
      FreeType - render bitmap và vector font.
      SQLite - quản lý database của ứng dụng.

     1.2.4 Tầng Runtime:
             Mỗi ứng dụng Android chạy trên một proccess riêng của Dalvik VM
     (máy ảo). Dalvik được viết để chạy nhiều máy ảo cùng một lúc một cách hiệu
     quả trên cùng một thiết bị.
             Máy ảo Dalvik thực thi các file mang định dạng .dex (Dalvik Excutable),
     định dạng này là định dạng đã được tối ưu hóa để chỉ chiếm một vùng nhớ vừa
     đủ xài và nhỏ nhất có thể. VM chạy các class (đã được compile trước đó bởi
     1trình biên dịch ngôn ngữ Java), sở dĩ VM chạy được các class này là nhờ
     chương trình DX tool đã convert các class sang định dạng .dex.

     1.2.5 Tầng Application Framework:
             Đây là tầng mà Google xây dựng cho các developer để phát triển các
     ứng dụng của họ trên Android, chỉ bằng cách gọi các API có sẵn mà Google đã
     viết để sử dụng các tính năng của phần cứng mà không cần hiểu cấu trúc bên
     dưới.
         Bằng cách cung cấp một nền tảng phát triển mở, Android cho các nhà phát
     triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo. Nhà phát
     triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập,
     các dịch vụ chạy nền, thiết lập hệ thống báo thức, thêm các thông báo để các
     thanh trạng thái, và nhiều, nhiều hơn nữa.
         Tất cả các ứng dụng thường gồm một bộ các dịch vụ và hệ thống cơ bản
  sau:




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                           8
Tìm hiểu lập trình trên Android


             View UI dùng để xây dựng layout của ứng dụng bao gồm: list view,
               text field, button, dialog, form ...
             Content Providers cho phép các ứng dụng có thể truy cập dữ liệu từ
               các ứng dụng khác (như ứng dụng của ta có thể lấy thông tin
               Contacts của điện thoại Android), hoặc để chia sẻ dữ liệu của riêng
               ứng dụng.
             Resource Manager cung cấp cách thức truy cập đến non-code
               resources như các asset, graphic, image, music, video ...
             Notification Manager cho phép tất cả các ứng dụng hiển thị thông
               báo của mình trên HDH.
             Activity Manager quản lý vòng đời của các ứng dụng.
            Ở góc nhìn của người dùng ta có thêm tầng application (là ứng dụng do
     chúng ta viết), sau đây là sơ đồ tổng quát như hình 1.1:




                                     1-1 Kiến trúc Android




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                         9
Tìm hiểu lập trình trên Android


                   Chương 2. MÔI TRƯỜNG LẬP TRÌNH

2.1 GIỚI THIỆU:
      Trong chương này sẽ giới thiệu các công cụ lập trình cho Android (Android
Development Tools). Chúng ta sẽ dần làm quen với Eclipse và Android Development
Tool plug-in, thông qua Android SDK và công cụ của nó, chạy một ứng dụng Android
trên Emulator(tạm dịch là trình giả lập giao diện của Android trên PC). Với những kĩ
năng đó trong tay, chúng ta sẽ tìm hiểu các gói Java packages được cung cấp trong
SDK giúp nâng cao khả năng lập trình trên Android.
                                     2-1 Môi trường lập trình trong Android


       Eclipse OpenSource IDE                        Command-Line tools
               Coding                                     •File transfer tools

               Debugging                                     •GSM simulation tester


       Android Development Tools                     Android Emulator
       (plug-in)                                             •Multiple skins
                                                             •Network connectivity options
        SDK
                                                             •Integrated with Eclipse via
        Emulator profile
                                                             Android Development Tools plug-
           configuration                                      in
        Emulator launch                             Android Development
           Process & file system viewing
           Log viewing
                                                            Android Device
                                                            •Physical phone hardware

            SDK Documentation



2.2 ANDROID SDK:
      Android SDK, viết tắt của Android Software Development Kit, có thể gọi là
“công cụ phát triển phần mềm” mà cụ thể ở đây là phát triển ứng dụng cho Android
OS. Đến đây thì chắc các chúng ta cũng đã hiểu đơn giản Google Adroid SDK là bộ
công cụ được chính Google xây dựng và phát hành miễn phí đến giới Developer để họ
dễ dàng xây dựng và phát triển các ứng dụng chạy được trên Android OS.
Android SDK có các đặc tính sau:

            Được phát triển và cung cấp miễn phí



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                        10
Tìm hiểu lập trình trên Android


           Truy cập đến phần cứng Wi-Fi.
           GSM, EDGE và tính năng mạng 3G cho phép việc chuyển dữ liệu, gọi
              điện hay gửi tin SMS trong mạng di động.
           Gói API toàn diện cho các dịch vụ nền tảng ví dụ như GPS.
           Truy cập toàn bộ phần cứng điều khiển đa phương tiện như chơi nhạc,
              ghi âm hay sử dụng microphone và camera.
           Chia sẻ dữ liệu trong kho dữ liệu.
           Tích hợp trình duyệt dựa trên bộ WebKit (mã nguồn mở).
           P2P hổ trợ sử dung Google Talk.
           Hỗ trợ tốt đồ họa 3D nhờ sử dụng OpenGL ES.
     Android SDK cần phải được cài đặt để xây dựng các ứng dụng Android. Android
SDK bao gồm tài liệu tích hợp HTML_base lõi chính của Javadoc để thể hiện các gói
và lớp trong Java.

2.3 MÁY ẢO DALVIK:
     Một trong những thành phần quan trọng của Android là máy ảo Dalvik. Thay vì
sử dụng máy ảo Java như trước kia Android sử dùng máy ảo của riêng nó được thiết kế
để bảo đảm rằng đa ứng dụng có thể chạy mượt mà trên một thiết bị di động.
     Máy ảo Dalvik sử dụng lõi Linux để xử lý các chức năng ở mức thấp bao gồm
bảo mật, các tiến trình, các luồng và quản lý vùng nhớ. Nó cũng có thể viết bằng ứng
dụng C/C++ để chạy trực tiếp lên lõi Linux bên dưới. Giữa phần cứng và các dịch vụ
hệ thống được quản lý bởi máy ảo Dalvik, nó là một thành phần ở giữa. Bằng cách sử
dụng máy ảo này để chạy ứng dụng, các nhà phát triển hoàn toàn không phải bận tâm
gì về các phần cứng bên dưới. Khi máy ảo này chạy nó sẽ tạo ra tập tin có đuôi là .dex,
tập tin này được SDK tạo ra bởi sự chuyển đổi từ các lớp biên dịch ngôn ngữ Java .

2.4 CÁC GÓI JAVA CẦN THIẾT:
          java.lang —gói chứa các lớp lõi của Java
          java.io —xuất nhập.
          java.net —kết nối mạng.




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                              11
Tìm hiểu lập trình trên Android


         java.util _ chứa các lớp tiện ích. Bao gồm: Log thường được dùng đề viết
            LogCat.
         java.text —tiện ích sử lý văn bản.
         java.math —các lớp toán học.
         javax.net —các lớp mạng.
         javax.security —Security-related classes.
         javax.xml —các lớp liên quan đến DOM-based XML.
         org.apache.* — các lớp liên quan đến HTTP-related.
         org.xml —các lớp liên quan đến SAX-based XML .
Các gói dùng cho lập trình Android:
           Android.app—Android application model access
           Android.content—truy xuất dữ liệu trong Android
           Android.net—bao gồm Uri class dùng cho việc truy xuất các nội dung
             khác
           Android.graphics—đồ họa
           Android.opengl—các lớp OpenGL
           Android.os—truy cập ở mức độ hệ thông đến môi trường Android
           Android.provider—các lớp liên quan đến ContentProvider
           Android.telephony—khả năng truy cập Telephony
           Android.text—Text layout
           Android.util—tập các tiện thao tác trên văn bản,bao gồm XML
           Android.view—thành phần UI (giao diện người dùng)
           Android.webkit—Browser functionality
           Android.widget—thành phần UI mức độ cao hơn
     Trong đó các gói gần như là lõi của mọi ứng dụng trên Android đó là
Android.app, Android.view và Android.content.

2.5 THÀNH PHẦN CHÍNH CỦA ECLIPSE KHI TẠO ỨNG DỤNG TRÊN ANDROID:
    Môi trường phát triển Rich Java bao gồm trình biên dịch, class autocompletion,
      và tích hợp Javadoc
    Bẫy lỗi code



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                         12
Tìm hiểu lập trình trên Android


    Quản lý và chạy Android Emulator profile
    The Dalvik Debug Monitoring Service (DDMS)
    Khung nhìn các tiến trình (Thread and heap views)
    Quản lý Hệ thống tập tin giao diện (Emulator filesystem management)
    Điều khiển dữ liệu và hội thoại (Data and voice network control)
    Điều khiển giao diện (Emulator control)
    Ghi lỗi hệ thống và ứng dụng (System and application logging)

2.6 THÀNH PHẦN QUAN TRỌNG TRONG MỘT ANDROID PROJECT:
         Activity (Android.app.Activity): đây là lớp khởi tạo giao diện ứng dụng
           nội bộ trên Android tương tư như MIDlet trong J2ME.
         Service (Android.app.Service): cung cấp các dịch vụ liên quan đến
           client/service. Một Service sẽ chạy ngầm bên dưới, sau đó các client
           (Activity) sẽ kết nối và truy xuất các hàm trên dịch thông qua Interface
           class.
         Broadcast receiver (Android.content.BroadcastReceiver): đây là một ứng
           dụng chạy ngầm dùng để đọc và cập nhật thông tin trên UI, ví dụ như cập
           nhật sự thay đỗi giờ, pin...
         Content Provider: cung cấp chức năng truy vấn dữ liệu giữa các ứng dụng
           của Android.
         Intent: nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi
           các thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công
           việc mà chúng ta mong muốn.

2.7 CHU KỲ SỐNG CỦA ỨNG DỤNG ANDROID
      Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng
dụng khi codes cần được xây dựng, khởi chạy và sẽ còn chạy cho đến khi:
          Nó không phụ thuộc.
          Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác.




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                         13
Tìm hiểu lập trình trên Android


      Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của tiến
trình ứng dụng không được điều khiển trực tiếp bởi chính nó. Thay vào đó, nó được
xác định bởi hệ thống qua một kết hợp của:
           Những phần của ứng dụng mà hệ thống biết đang chạy.
           Những phần đó quan trọng như thế nào đối với người dùng.
           Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.

      2.7.1 Chu kỳ sống thành phần
             Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ
      lúc bắt đầu khởi tạo và đến thời điểm kết thúc, đôi lúc chúng có thể là active
      (visible hoặc invisible) hoặc inactive.

      2.7.2 Activity Stack
             Bên trong hệ thống các activity được quản lý như một activity stack. Khi
      một Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity
      đang chạy activity trước sẽ ở bên dưới activity mới và sẽ không thấy trong suốt
      quá trình activity mới tồn tại.
       Nếu người dùng nhấn nút Back thì activity kết tiếp của stack sẽ di duyển lên
      và trở thành active.




                                        Hình 2-2 Activity stack




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                           14
Tìm hiểu lập trình trên Android


     2.7.3 Các trạng thái của chu kỳ sống




                      Hình 2-3 Chu kỳ sống của Activity

     Một Activity chủ yếu có 4 chu kỳ chính sau:
   Active hoặc running: Khi Active là được chạy trên màn hình. Activity này tập
     trung vào những thao tác của người dùng trên ứng dụng.
   Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng
     vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ
     đầy màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi
     hệ thống trong trường hợp thiếu vùng nhớ.
   Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái và
     thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ
     trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác.
   Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo
     nguyên tắc ưu tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị
     giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại
     hoàn toàn và phục hồi lại trạng thái trước đó.

     2.7.4 Chu kỳ sống của ứng dụng
            Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành
     phần đều có một chu trình sống riêng. Và ứng dụng chỉ được gọi là kết thúc khi




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                         15
Tìm hiểu lập trình trên Android


     tất cả các thành phần trong ứng dụng kết thúc. Activity là một thành phần cho
     phép người dùng giao tiếp với ứng dụng. Tuy nhiên, khi tất cả các Activity kết
     thúc và người dùng không còn giao tiếp được với ứng dụng nữa nhưng không
     có nghĩa là ứng dụng đã kết thúc. Bởi vì ngoài Activity là thành phần có khả
     năng tương tác người dùng thì còn có các thành phần không có khả năng tương
     tác với người dùng như là Service, Broadcast receiver. Có nghĩa là những thành
     phần không tương tác người dùng có thể chạy background dưới sự giám sát của
     hệ điều hành cho đến khi người dùng tự tắt chúng.

     2.7.5 Các sự kiện trong chu kỳ sống của ứng dụng
            Nếu một Activity được tạm dừng hoặc dừng hẳn, hệ thống có thể bỏ
     thông tin khác của nó từ vùng nhớ bởi việc gọi hàm finish() của nó, hoặc đơn
     giản giết tiến trình của nó. Khi nó được hiển thị lần nữa với người dùng, nó
     phải được hoàn toàn restart và phục hồi lại trạng thái trước. Khi một Activity
     chuyển qua chuyển lại giữa các trạng thái, nó phải báo việc chuyển của nó bằng
     việc gọi hàm transition.




                                    Hình 2-4
            Tất cả các phương thức là những móc nối mà chúng ta có thể override để
     làm tương thich công việc trong ứng dụng khi thay đổi trạng thái. Tất cả các
     Activity bắt buộc phải có onCreate() để khởi tạo ứng dụng. Nhiều Activity sẽ
     cũng hiện thực onPause() để xác nhận việc thay đổi dữ liệu và mặt khác chuẩn
     bị dừng hoạt động với người dùng.

     2.7.6 Thời gian sống của ứng dụng
            Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một
     Activity. Thời gian sống của một Activity diễn ra giữa lần đầu tiên gọi
     onCreate() đến trạng thái cuối cùng gọi onDestroy(). Một Activity khởi tạo




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                         16
Tìm hiểu lập trình trên Android


     toàn bộ trạng thái toàn cục trong onCreate(), và giải phóng các tài nguyên đang
     tồn tại trong onDestroy().

     2.7.7 Thời gian hiển thị của Activity
            Visible lifetime của một activity diễn ra giữa lần gọi một onStart() cho
     đến khi gọi onStop(). Trong suốt khoảng thời gian này người dùng có thể thấy
     activity trên màn hình, có nghĩa là nó không bị foreground hoặc đang tương tác
     với người dùng. Giữa 2 phương thức người dùng có thể duy trì tài nguyên để
     hiển thị activity đến người dùng.

     2.7.8 Các hàm thực thi
      OnCreate(...): hàm này được gọi khi lớp Activity được khởi tạo, dùng để
        thiết lập giao diện ứng dụng và thực thi những thao tác cơ bản.
      onStart(): hàm này được gọi khi lớp ứng dụng xuất hiện trên màn hình.
      onResume(): hàm được gọi ngay sau OnStart hoặc khi người dùng focus
        ứng dụng, hàm này sẽ đưa ứng dụng lên top màn hình.
      onPause(): hàm được gọi khi hệ thống đang focus đến 1 activity trước đó.
      onStop(): hàm được gọi khi một activity khác được khởi động và focus.
      onRestart(): đưọc gọi khi ứng dụng chuyển sang onStop(), nhưng muốn khởi
        động lại bằng onStart().

2.8 CÁC CÔNG CỤ CẦN THIẾT ĐỂ LẬP TRÌNH TRÊN ANDROID VÀ                ƯỚNG DẪN

    CÀI ĐẶT:


     2.8.1 Các công cụ cần thiết để lập trình:
         Hệ điều hành: Window XP, Win7
         Công cụ lập trình: Eclipse version 3.6 hoặc cao hơn
         Bộ công cụ Android SDK

     2.8.2 Các bước cài đặt:
     Chúng ta có 3 bước chính: Cài đặt Eclipse IDE, Plugin Android cho Eclipse
     và cuối cùng là cài đặt Emulator (Android SDK). Và được chia thành các
     bước nhỏ sau:




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                           17
Tìm hiểu lập trình trên Android


         Bước 1: Vào địa chỉ http://www.eclipse.org/downloads/ download phần
           mền lập trình eclipse. Chọn phần Eclipse IDE cho các nhà phát triển
           JAVA.
           Sau khi đã download eclipse chúng ta giải nén ra để sử dụng.
           Sau khi giải nén xong cho chạy chương trình.
           Khi chạy, chương trình muốn lưu thư mục làm việc, chúng ta chọn thư
           mục tùy ý và nhấn OK.
         Bước                     2:                     truy            cập
           www.oracle.com/technetwork/java/javase/downloads/index.html        để
           downloads JAVA SE . Chọn downloads JAVA SE > vào thư mục chứa
           JAVA SE và tiến hành cài đặt.
         Bước 3: Truy cập developer.Android.com/sdk/index.html . Và tiến hành
           download chọn phần Android-sdk_r10-windows.zip .
           Sau khi downloads vào thư mục chứa phần download giải nén và chọn
           SDK Manager.exe chạy chương trình tự động update.
           Vào chương trình eclipse chọn menu Help -> Install New Software…
           Name: Google Android ( tùy ý)
           Location : http//:dl-ssl-google.com/Android/eclipse
           Sau đó chọn OK.




                                           Hình 2-5
           Chọn Sellect All , chọn vào các ô như hình 2.7




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                       18
Tìm hiểu lập trình trên Android




                                          Hình 2-6
           Sau đó chương trình tự động cập nhật những bản cần để cài đặt.
           Tiếp theo bạn chọn những phần cần thiết để cài đặt hoặc chọn tất cả ->
           Next -> chọn I accept the terms of the license agreements ->finsh.
           Lưu ý khi cài: windows muốn chứng thực, ở bước này chọn OK.
           Sau khi đã cài xong chọn Restsart Now.
         Bước 4: Khi chương trình đã cài đặt phần Android SDK hoàn tất và khởi
           động lại chương trình, vào Window ->Prefeneces để chỉ đường dẫn của
           file SDK.




                                       Hình 2-7
        Ở bước này chọn đường dẫn tới thư mục chứa Android SDK. Sau đó chọn
        Apply.
         Bước 5: Ở các bước trên đã cấu hình Android SDK trong eclipse , bước
           tiếp theo sẽ đi cấu hình để tạo ra 1 máy ảo chứa hệ điệu hành Android.
           Vào Window -> Android SDK and AVD Manager.



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                         19
Tìm hiểu lập trình trên Android


           Cửa sổ Android SDK and AVD Manager hiện ra , chương trình đang tự
           động cập nhật. Sau đó chọn Virtual Decvices -> New.
           Name ( Tên máy ảo) : AndroidMobile2.2
           Size (kích thước bộ nhớ ): 512 MB
           Chọn Create AVD




                                        Hình 2-8
     Đã tạo thành công máy ảo , tiếp theo chọn Start…..-> Launch để khởi động
     máy ảo.




                                       Hình 2-9

2.9 BẮT ĐẦU LẬP TRÌNH 1 C     ƯƠNG TRÌN        ELLO WORLD ĐẦU TIÊN:

    Lưu ý ở đây tôi dùng Emulator bảng 2.2.
    Mở Eclipse




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                   20
Tìm hiểu lập trình trên Android


     Chọn File > New > Project…
     Chọn Android Project và đặt tên như hình bên dưới nhé:
      Dòng Project Name: HelloAndroid
      Dòng Application Name: HelloAndroid
      Package name: com.HelloAndroid
      Activity name: HelloAndroid_Activity
      Min SDK version : 8




                                           2-10

Thế là chúng ta đã có 1 ứng dụng nhỏ rồi đó.
Sau đó khởi động Android Emulator bằng cách vào menu Window > Android SDK
and ADV manager > chọn thiết bị đã tạo ở phần trên và click Start…>Launch.




                                      Hình 2.13
Vậy là ta đã có 1 chiếc điện thoại Mobile Android chạy ngay trên máy tính rồi đó.
Bây giờ chúng ta quay về màn hình Eclipse và Click vào Run…> chọn Android
Application > OK




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                             21
Tìm hiểu lập trình trên Android


Chúng ta có được ứng dụng cho hình sau:




                                                2-11

Bây giờ chúng ta sẽ tìm hiểu sâu hơn về ứng dụng này. Quay lại màn hình Eclipse lần
lượt vào các mục :
       Src>HelloAndroid_Activity.java
       Res> layout>main.xml
       Res>values>string.xml
Đây chính là 3 file quan trọng trong một ứng dụng Android
Bây giờ chúng ta vào file String.xml thay dòng
<string name="hello">Hello World, HelloAndroid_Activity!</string>
Bằng dòng <string name="hello">Xin chào Android!</string>
Và run… chúng ta sẽ tạo ra 1 ứng dụng có giao diện thuần Việt đúng nghĩa.




                                                2-12




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                         22
Tìm hiểu lập trình trên Android


2.10 THÀNH PHẦN GIAO DIỆN ANDROID

      2.10.1 View
                                        View


                            GroupView             Control
                            Ưw


               Layout                    Widget   (compound   control)




                        Control                   Control                Control
                                          2-13

      Trong Android giao diện người dùng được xây dựng từ các đối tượng View.
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu        trúc   phân
cấp như hình trên. Một screen là một tập hợp các Layout và các widget được bố trí có
thứ tự. Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cần phải được
gọi một hàm là setContentView (R.layout.main); hàm này sẽ load giao diện từ file
MAIN.XML lên để phân tích thành mã bytecode.

      2.10.2 VIEWGROUP:
      ViewGroup là sự mở rộng của class View hay nói cách khác ViewGroup chính
là các WidgetLayout được dùng để bố trí các đối tượng khác trong một screen.Có các
loại ViewGroup như sau:

                Linear Layout
      LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang
hoặc chiều dọc nhưng trên một line duy nhất mà không có xuống dòng.

                Frame layout
      FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như làcác
Layer trong Photoshop. Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất
bởi các đối tượng thuộc Layer nằm trên. FrameLayer thường được sử dụng khi muốn
tạo ra các đối tượng có khung hình bên ngoài chẳng hạn như contact image button.



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                              23
Tìm hiểu lập trình trên Android


                   Table layout
        Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần bố trí
các widget theo các row và column. Chẳng hạn như, giao diện của một chiếc máy tính
đơn giản hoặc một danh sách dữ liệu.

                   AbsoluteLayout
        Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layout
dựa vào 2 thuộc tính toạ độ x, y. Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì
toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệ khoảng
cách giữa các đối tượng. Khi chuyển ứng dụng sang một màn hình có kích thước với
màn hình thiết kế ban đầu thì vị trí của các đối tượng sẽ không còn được chính xác như
ban đầu.
        Dùng câu lệnh <AbsoluteLayout></ AbsoluteLayout> để gọi Layout này.
Muốn định vị một đối tượng, phải định vị hai giá trị Android:layout_x="…" và
Android:layout_y="…".
               <AbsoluteLayout
                       xmlns:Android="http://schemas.Android.com/apk/res/Android"
                       Android:layout_width="fill_parent"
                       Android:layout_height="fill_parent"
                       Android:id="@+id/mainlayout">
                 <Button
                 Android:layout_width="wrap_content"
                 Android:layout_height="wrap_content"
                 Android:text="placed at 100,130 pixels (px)"
                 Android:layout_x="100px"
                 Android:layout_y="130px"
                 />
               <AbsoluteLayout>

Ví dụ: Thử tạo ra những button và cho những button này nằm ở những vị trí khác
nhau:
Các button này nằm ở những vị trí khác nhau với các chỉ số đo lường khác nhau.




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                              24
Tìm hiểu lập trình trên Android




                                                    Hình 3.4

                RELATIVE LAYOUT
             Layout này cho phép bố trí các widget theo một trục đối xứng ngang
     hoặc dọc. Để đặt được đúng vị trí thì các widget cần được xác định một mối
     ràng buộc nào đó với các widget khác. Các ràng buộc này là các ràng buộc trái,
     phải, trên, dưới so với một widget hoặc so với layout parent. Dựa vào những
     mối ràng buộc đó mà RetaliveLayout cũng không phụ thuộc vào kích thước của
     screen thiết bị. Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng
     nhằm mục đích giảm lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh
     quá trình xử lý.




                                2-14 Bố trí widget trong RetaliveLayout

             Các đối tượng trong Layout này phải có id để tạo mối quan hệ giữa các
     đối tượng. Android:layout_alignParentRight="true" câu lệnh này giúp đối
     tượng     sau      không       nằm        đè       lên       đối     tượng   trước   đó.




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                   25
Tìm hiểu lập trình trên Android


     Android:layout_marginLeft="…" cho biết đối tượng nằm cách lề phải và trái
     bao nhiêu. Đối tượng sau muốn tạo mối quan hệ với đối tượng trước, và muốn
     cho hai đối tượng nằm ở vị trí nào thì sử dụng câu lệnh:
     <Android:layout_alignTop= "@id/…">
     <?xml version="1.0" encoding="utf-8"?>
     <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
       Android:layout_width="fill_parent"
       Android:layout_height="fill_parent">
       <Button
         Android:id="@+id/ok"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:layout_alignParentRight="true"
         Android:layout_marginLeft="10dip"
         Android:text="Test" />
       <Button
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:layout_alignTop="@id/ok"
         Android:text="Test" />
     </RelativeLayout>


2.11 CÁC CONTROL

     2.11.1 BUTTON
            Sở dĩ widget button được giới thiệu đầu tiên trong số các widget khác là
       vì đây là đối tượng có thể nói là được dùng nhiều nhất trong hầu hết các ứng
       dụng Android.
        Để thiết kế giao diện với một button ta có 2 cách như sau:
            <Button
               Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:id="@+id/cmdButton1"
                Android:text="Touch me!"
            />
            Đây là cách làm ra một button đơn giản. Đoạn mã trên sau khi chạy:




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                           26
Tìm hiểu lập trình trên Android




                                                2-15

                    Thực ra nếu không phải đòi hỏi phải custom lại một widget thì
     không cần phải sử dụng tới code. Trong một số trường hợp bắt buộc chúng ta
     phải custom các widget để cho phù hợp với hoàn cảnh. Chẳng hạn như trong
     game, các menu hay các nút điều khiển,…
            Để khai báo một Button trong code ta làm như sau:
            void showButton()
              {
                     setContentView(R.layout.button);
                     Button next = (Button) findViewById(R.id.btnButton);
                     next.setOnClickListener(new View.OnClickListener() {
                       public void onClick(View view) {
                              Toast.makeText(getApplicationContext(), "Bạn vừa click vào Button",
            Toast.LENGTH_SHORT).show();
                       }

                      });
             }




                                             nh 2-16




     2.11.2 LISTVIEW
             Được sử dụng để thể hiện một danh sách các thông tin theo từng cell.
       Mỗi cell thông thường được load lên từ một file XML đã được cố định trên đó
       số lượng thông tin và loại thông tin cần được thể hiện.




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                             27
Tìm hiểu lập trình trên Android


       Để thể hiện được một list thông tin lên một screen thì cần phải có 3 yếu tố
       chính:
          Data Source: Data Source có thể là một ArrayList, HashMap hoặc bất
           kỳ một cấu trúc dữ liệu kiểu danh sách nào.
          Adapter: Adapter là một class trung gian giúp ánh xạ dữ liệu trong Data
           Source vào đúng vị trí hiển thị trong ListView. Chẳng hạn, trong Data
           Source có một trường name và trong ListView cũng có một TextView để
           thể hiện trường name này. Tuy nhiên, ListView sẽ không thể hiển thị dữ
           liệu trong Data Source lên được nếu như Adapter không gán dữ liệu vào
           cho đối tượng hiển thị.
          ListView: ListView là đối tượng để hiển thị các thông tin trong Data
           Source ra một cách trực quan và người dùng có thể thao tác trực tiếp trên
           đó.




                                            2-17

            Để gọi đối tượng ListView trong xml. Mỗi ListView phải có ID để gọi
            trong Activity.
            <ListView Android:id="@+id/ListView01"
                   Android:layout_width="wrap_content"
                   Android:layout_height="wrap_content" />
            Để tạo các đối tượng trong file Activity thì phải khai báo:
            public class TestActivity extends Activity {
                   private ListView lv1;
                   private      String                                    lv_arr[]   =
                   {"Android","iPhone","BlackBerry","AndroidPeople"};
                   @Override
                   public void onCreate(Bundle icicle)




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                              28
Tìm hiểu lập trình trên Android

                  {
                           super.onCreate(icicle);
                           setContentView(R.layout.main);
                           lv1=(ListView)findViewById(R.id.ListView01);
                           // By using setAdpater method in listview we an add string
                  array in list.
                                   lv1.setAdapter(new
                           ArrayAdapter<String>(this,Android.R.layout.simple_list_item_
                           1 , lv_arr));
                  }
            Ví dụ: Tạo ra một ListView gồm các thành phần Android, iPhone,
            BlackBerry, AndroidPeople:




                                             2-18

     2.11.3 EDITTEXT
           Trong Android đối tượng EditText được sử dụng như một TextField
      hoặc một TextBox. Giá trị Android:singleLine bằng false, edittext sẽ là 1
      Texbox, ngược lại nó là 1 Textfield.
      <EditText
            Android:id="@+id/EditText01"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:textStyle="bold"
            Android:textSize="20dip"
            Android:textColor="#000000"
            Android:text="Hello Android!"
            Android:singleLine="true"
            Android:inputType="textCapWords"
            />



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                   29
Tìm hiểu lập trình trên Android




                                             2-19

     2.11.4 TEXTVIEW
            TextView có tác dụng là để hiển thị văn bản.
            <TextView
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="Hello World! Demo TextView"
            Android:textColor="#07a931"
            Android:textSize="20px"
            Android:gravity="center_horizontal"
            />
            Trong đoạn mã trên, Android:text="" dùng để ghi đoạn text muốn thể
     hiện, Android:textColor="" để định dạng màu chữ, Android:textSize="" kích cở
     chữ, Android:gravity="" dùng để canh chỉnh cho đoạn text. Nếu muốn tìm hiểu
     thêm, hãy gõ Android: sau đó nhấn Crtl+ Space để tìm hiểu thêm về các thuộc
     tính của nó.


     2.11.5 CHECKBOX
          Nhận hai giá trị true hoặc false. Đối tượng CheckBox cho phép chọn nhiều
     item cùng một lúc.
          XML:
           <CheckBox
           Android:id="@+id/CheckBox01"
           Android:layout_width="wrap_content"



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                        30
Tìm hiểu lập trình trên Android

           Android:layout_height="wrap_content"
           Android:text="True"
           Android:checked="true"
           />

          Kết quả như sau:




                                               2-20

     2.11.6 MENUOPTION
          Có 2 cách tạo một MenuOptions:
          Tạo bằng code và tập tin XML, dưới đây chúng ta dùng XML




                                             h 2-21

              Khai báo bằng code XML:
              <menu xmlns:Android="https://schemas.Android.com/apk/res/Android">

                <item Android:id="@+id/checkbox" Android:title="Checkbox" />

                <item Android:id="@+id/button" Android:title="Button" />

                <item Android:id="@+id/edittext" Android:title="Edittext" />
                //tiếp tục cho các menu khác
                ………




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                            31
Tìm hiểu lập trình trên Android

                  </menu>

      2.11.7 CONTEXTMENU
               ContextMenu được sử dụng để hiển thị các tuỳ chọn khi người dùng
      nhấn dài vào một Button trên màn hình. Để tạo một ContextMenu ta cũng có 2
      cách giống như tạo MenuOptions ở trên chỉ khác tên phương thức.
               Phương thức:     onCreateContextMenu( ContextMenu      menu,     View   v,
      ContextMenuInfo menuInfo)
      sẽ được gọi và truyền vào 3 tham số là:

             ContextMenu: đối tượng để add các context menu item
             View: Đối tượng nơi mà xảy ra sự kiện
             ContextMenuInfo: Cho biết vị trí xảy ra sự kiện trong ListView.




                                         2-22

2.12 TÙY BIẾN CONTROL (CUSTOM CONTROL):
     Chúng ta đã biết Android đã cung cấp cho chúng ta rất nhiều Control hữu
ích.Tuy nhiên ứng dụng của chúng ta đôi khi cũng cần những control do chính chúng
ta tạo ra để đáp ứng các nhu cầu của ứng dụng mà việc sử dụng các control có sẵn rất
khó khăn.
Ở đây chúng ta sẽ tạo ra một ListView, với màu nền và màu chữ bắt mắt.
       Bước 1: Tạo một Class có tên CustomListView như sau:




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                32
Tìm hiểu lập trình trên Android


             public class CustomListView extends       TextView {
                //cac cong cu ve CustomListView
                private Paint marginPaint;
                private Paint linePaint;
                private int paperColor;
                private float margin;
                public CustomListView(Context c,       AttributeSet a, int ds) {
                      super(c, a, ds);
                      init();
                }
                public CustomListView(Context c)       {
                      super(c);
                      init();
                }
                public CustomListView(Context c,       AttributeSet a) {
                      super(c, a);
                      init();
                }
                private void init() {

                 }
                 @Override
                 protected void onDraw(Canvas c) {
                       //sử dụng lớp cha TextView để vẽ text
                       super.onDraw(c);
                 }
             }

      Bước 2: tạo file colors.xml trong res/values. Tạo ra màu cho paper, margin,
       line, text.
          <resources>
                <color   name="notepad_paper">#AAFFFF99</color>
                <color   name="notepad_lines">#FF0000FF</color>
                <color   name="notepad_margin">#09FF0000</color>
                <color   name="notepad_text">#AA0000FF</color>
          </resources>

      Bước 3: tạo file dimens.xml trong res/values tạo giá trị margin cho paper.
          <resources>
                <dimen name="notepad_margin">30px</dimen>
          </resources>

      Bước 4: với những giá trị đã tạo ta tiếp tục viết code cho hàm init() đã khai
       báo trong file CustomListView.java:




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                             33
Tìm hiểu lập trình trên Android


                private void init() {
                      Resources myResources = getResources();
                      // tao choi ve, chung ta se su dung trong onDraw
                      marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

                marginPaint.setColor(myResources.getColor(R.color.notepad_
          margin));
                      linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
                      // lay background paper va margin width
                      paperColor =
          myResources.getColor(R.color.notepad_paper);
                      margin =
          myResources.getDimension(R.dimen.notepad_margin);
                }

      Bước 5: Tiếp tục viết thêm code cho hàm onDraw()
                      @Override
                protected void onDraw(Canvas c) {
                      // ve mau cho paper
                      c.drawColor(paperColor);

                      //c.drawLine(startX, startY, stopX, stopY, paint)
                      c.drawLine(0, 0, getMeasuredHeight(), 0, linePaint);
                      c.drawLine(0, getMeasuredHeight(),
          getMeasuredWidth(),
                                   getMeasuredHeight(), linePaint);
                      // ve margin
                      c.drawLine(margin, 0, margin, getMeasuredHeight(),
          marginPaint);
                      // di chuyen text khoang margin vua tao
                      c.save();
                      c.translate(margin, 0);
                      // su dung text view de render text
                      super.onDraw(c);
                      c.restore();
                }

      Bước 6: tạo một file customlistview.xml trong res/layout:
          <com.example.UserInterface.CustomListView
                xmlns:android="http://schemas.android.com/apk/res/android"
                      android:orientation="vertical"
                      android:layout_width="fill_parent"
                      android:layout_height="fill_parent"
                      android:padding = "10dp"
                      android:scrollbars = "vertical"
                      android:textColor = "@color/notepad_text"
                      android:fadingEdge = "vertical"
                      />




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                  34
Tìm hiểu lập trình trên Android


2.13 VÍ DỤ SỬ DỤNG LISTVIEW
   Bước 1: Khai báo trong file strings.xml và main.xml như sau:
       <resources>
             <string name="hello">Hello World, Main!</string>
             <string name="app_name">Ví dụ về ListView</string>
             <string name="str_btnAdd">Thêm</string>
       </resources>

    Và trong main.xml, chúng ta khai báo một TextView, một Button, một Listview
    có tên lần lượt như sau: txtItem, btnAdd, listItems.
   Bước 2: Viết trong activity Main.java, sử dụng custom listview vừa tạo ở trên.

             ArrayList<String> arr = new ArrayList<String>();
             ArrayAdapter<String> aa;
             String flower[]={"Hoa Lan","Hoa Huệ","Hoa Hồng"};
             String animal[]={"Voi","Sư tử","Hổ"};
             String currentMenu;
             @Override
           public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.main);
               btnAdd = (Button) findViewById(R.id.btnAdd);
               txtItem = (EditText) findViewById(R.id.txtItem);
               listItems = (ListView) findViewById(R.id.listItems);
               txtItem.setOnKeyListener(this);
               btnAdd.setOnClickListener( this);
               arr = new ArrayList<String>();
               //doan code su dung customlistview
               aa = new
       ArrayAdapter<String>(this,R.layout.customlistview,arr);
                       listItems.setAdapter(aa);
           }



   Bước 3: tạo một menu bằng đoạn code sau, trước khi tạo một menu làm theo
    hình sau:




                                         2-23

     public boolean onCreateOptionsMenu(Menu menu)




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                        35
Tìm hiểu lập trình trên Android

           {
                  super.onCreateOptionsMenu(menu);
                  MenuItem item;
                  item = menu.add("Xóa");
                  item.setIcon(R.drawable.delete);
                  item = menu.add("Động vật");
                  item.setIcon(R.drawable.animal);
                  item = menu.add("Hoa");
                  item.setIcon(R.drawable.flower);
                  return true;
           }
           public boolean onOptionsItemSelected(MenuItem    item)
           {
                 super.onOptionsItemSelected(item);
                 if (item.hasSubMenu()==false) {
                       if (item.getTitle().toString() ==    "Động vật") {
                              currentMenu = "Animal";
                              this.displayPopup("Chọn con   vật nào?",
     this.animal);
                       }
                       if (item.getTitle().toString() ==    "Hoa") {
                              currentMenu = "Flower";
                              this.displayPopup("Chọn hoa   nào?",
     this.flower);
                       }
                       if (item.getTitle().toString() ==    "Xóa") {
                              int index =
     listItems.getSelectedItemPosition();
                              this.deleteItem(index);
                       }
                 }
                 return true;
           }

   Bước 4: viết thêm các hàm xử lý sự kiện:
           public boolean onKey(View v, int keyCode, KeyEvent event) {
                       if (event.getAction() == KeyEvent.ACTION_DOWN &&
           keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
                             addItem(txtItem.getText().toString());
                             return true;
                       }
                       return false;
                 }
                 @Override
                 public void onClick(View v) {
                       if (v == btnAdd) {
                             addItem(txtItem.getText().toString());
                       }
                 }
                 @Override
                 public void onClick(DialogInterface dialog, int i) {
                       if (currentMenu=="Animal") {
                             this.addItem(animal[i]);
                       }
                       if (currentMenu=="Flower") {
                             this.addItem(flower[i]);
                       }
                 }




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                     36
Tìm hiểu lập trình trên Android


   Bước 5: và cuối cùng chúng ta sẽ thêm các hàm
           private void deleteItem(int index)
                  {
                        if (index>=0) {
                               String itemName = (String)
           listItems.getItemAtPosition(index);

                        arr.remove(index);
                        aa.notifyDataSetChanged();
                        //hiện câu thông báo mờ khi xóa 1 item
                        Toast.makeText(getApplicationContext(), itemName + " đã
           được xóa", Toast.LENGTH_SHORT).show();

                          }
                   }
                   private void displayPopup(String title, String [] item)
                   {
                          Builder builder = new AlertDialog.Builder(this);
                          builder.setTitle(title);
                          builder.setItems(item, this);
                          builder.show();
                   }
                       public void addItem(String item)
               {
                   if (item.length()>0) {

                        arr.add(item);
                        aa.notifyDataSetChanged();
                        txtItem.setText("");
                        //hiện câu thông báo mờ khi thêm 1 item vào
                        Toast.makeText(getApplicationContext(), item + " đã
           thêm", Toast.LENGTH_SHORT).show();
                        }
               }

   Bước 6: Chạy chương trình và kết quả như sau:




                                            2-24




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                       37
Tìm hiểu lập trình trên Android


                Chương 4. LẬP TRÌNH TRÊN ANDROID

4.1 GIỚI THIỆU INTENTS:
     Intent 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 chúng ta triệu gọi cũng như truyền các dữ
liệu cần thiết để thực hiện một Activity từ một Activity khác.




                                             4-1

       4.1.1 Thành phần Intents:
       Thực ra Intent là một cấu trúc dữ liệu được mô tả trong Android.content.Intent.




                                             4-2

   Các Action định nghĩa sẵn:




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                              38
Tìm hiểu lập trình trên Android




                                              4-3

   Tự định nghĩa action:
    Về nguyên tắc chúng ta có thể đặt tên action của một intent là bất cứ thứ gì theo
  chuẩn đặt tên thông thường, hay thậm chí dùng luôn hằng action đã định nghĩa sẵn
  như ACTION_VIEW (hay “Android.intent.action.VIEW”). Cái tên VIEW thực chất
  chỉ là một tên gợi tả, chúng ta có thể dùng nó với mục đích thực hiện một activity
  để … gửi mail! Tuy nhiên điều đó rõ ràng là rất “ngớ ngẩn”. Thay vào đó ta hãy
  dùng ACTION_SEND hay ACTION_SENDTO.
    Việc đặt tên action cho intent đúng tên gợi tả còn có một ý nghĩa khác đó là app
  của chúng ta có thể được triệu gọi từ một app khác. Ví dụ chúng ta viết một app có
  activity đáp ứng intent ACTION_SEND và để chia sẻ một bức ảnh lên trang web
  của chúng ta (giống như ta làm với Facebook, Flickr etc.) Khi đó có thể app của
  chúng ta sẽ là một lựa chọn chia sẻ ảnh của người dùng điện thoại.

      4.1.2 Sử dụng Intents khởi động cho Activities:
             Phổ biến nhất trong Intents là việc liên kết dữ liệu giữa các thành phần
      ứng dụng, Intents được dùng để bắt đầu, dừng lại và chuyển tiếp giữa các
      Activities trong ứng dụng.
             Để mở một ứng dụng khác trong một ứng dụng có sẵn thì chúng ta gọi
      startActivity như sau: startActivity(myIntent);
             Để theo dõi thông tin phản hồi từ phương thức mở ta sử dụng phương
      thức : startActivityForResult(Intent)



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                           39
Tìm hiểu lập trình trên Android




                                           4-4

     4.1.3 Intent không tường minh thực thi Activity:
             Trong trường hợp này intent không chỉ định một lớp cụ thể mà thay vào
     đó dùng các dữ liệu khác (action, data, type, etc.) và để hệ thống tự quyết định
     xem lớp nào (app nào) sẽ thích hợp để đáp ứng intent đó.
             Thông tin action và category của activity trong một app đáp ứng intent
     đó phải được khai báo trong Manifest của app (AndroidManifest.xml) dưới
     dạng Intent-filter (tất nhiên nếu chúng ta muốn gọi một built-in action thì ta
     không cần quan tâm đến vấn đề này).
             Ví dụ: chúng ta muốn cho phép người dùng thực hiện cuộc gọi từ một
     ứng dụng, hơn là thực hiện quay số mới, chúng ta có thể sử dụng một ý
     định ngầm yêu cầu hành động ("quay số") được thực hiện trên một điện thoại
     như trong đoạn mã dưới đây:
             if (somethingWeird && itDontLookGood)
             {
                    Intent intent =
                    newIntent(Intent.ACTION_DIAL,Uri.parse(“tel:555-2368”));
                                       startActivity(intent);
             }

     4.1.4   Intent tường minh thực thi Activity
             Như đã trình bày ở phần trên, intent có thể dùng thuộc tính phụ
     component để chỉ định đích danh tên lớp sẽ thực thi Activity. Để thực hiện điều
     này, lớp Intent cung cấp các hàm đó là setComponent(ComponentName) và
     setClass(Context,      Class)      và         setClassName(Context,      String)
     setClassName(String, String).
     Chỉ được dùng để gọi các Activities trong cùng một app



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                           40
Tìm hiểu lập trình trên Android

     Intent intent = new Intent();
        intent.setClassName("ten_package", "ten_lop_ben_trong_package");
        startActivity(intent);

     4.1.5 Sử dụng Intents gửi đi thông điệp ra ngoài ứng dụng hoặc Activity:
            Là một cơ chế truyền tin cấp hệ thống, có khả năng gửi tin đến một tiến
     trình. Chúng ta có thể sử dụng Broadcast Receivers để nhận, để trả lời hoặc
     phát đi các dữ liệu mà chúng ta muốn.
            Broadcast Intent dùng để thông báo cho các ứng dụng khác các sự kiện
     của hệ thống hay ứng dụng, mở ra các mô hình lập trình hướng sự kiện giữa
     các ứng dụng. Broadcast Intent giúp cho ứng dụng của chúng ta cởi mở hơn bởi
     vì nó phát đi một sự kiện bằng cách sử dụng Intent.

         4.1.5.1 Cách thực hiện gửi dữ liệu dùng Intent trong Activity:
            Broadcast Intent thực tế khá đơn giản, trong các thành phần ứng dụng
     của chúng ta, chúng ta xây dựng một Intent mà chúng ta muốn quảng bá bằng
     cách sử dụng sentBroadcast để gửi đi.
            Ví dụ :
                      Intent intent = new Intent(NEW_LIFEFORM_DETECTED);
                      intent.putExtra(“lifeformName”, lifeformType);
                      intent.putExtra(“longitude”, currentLongitude);
                      intent.putExtra(“latitude”, currentLatitude);
                      sendBroadcast(intent);


         4.1.5.2 Nhận dữ liệu với Broadcast Receiver:
            BroadcastReceivers được dùng để nhận dữ liệu từ Broadcast Intents, để
         kích hoạt BroadcastReceivers thì nó cần phải được đăng ký hoăc khai trong
         code hoặc trong Mainifest và chúng ta cần phải sử dụng Intents Filter để xác
         định Intent được phép gửi dữ liệu đến.
            Ví dụ: khởi tạo mới một BroadcastReceivers .
                      import Android.content.BroadcastReceiver;
                      import Android.content.Context;
                      import Android.content.Intent;
                      public class MyBroadcastReceiver extends BroadcastReceiver {
                      @Override
                      public void onReceive(Context context, Intent intent) {
                                    //TODO: React to the Intent received.



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                              41
Tìm hiểu lập trình trên Android

                                 }
                 }

                 Thông thường thì BroadcastReceivers sẽ cập nhật nội dung, khởi
           động dịch vụ , cập nhật người dùng cuối, hoặc thông báo người sử dụng
           bằng cách sử dụng quản lý Notification Manager.
                 Ví   dụ    đoan     code     sau    đây    cho     thấy   cách     đăng   ký
           BroadcastReceivers trong code hoặc trong Mainifest.
                 public class LifeformDetectedBroadcastReceiver extends
                  BroadcastReceiver {
                         public static final String BURN=“com.paad.
                                  alien.action.BURN_IT_WITH_FIRE”;
                         @Override
                         public void onReceive(Context context, Intent intent) {
                                  // Get the lifeform details from the intent.
                                  Uri data = intent.getData();
                                  String type = intent.getStringExtra(“type”);
                                  double lat = intent.getDoubleExtra(“latitude”, 0);
                         double lng = intent.getDoubleExtra(“longitude”, 0);
                                  Location loc = new Location(“gps”);
                                  loc.setLatitude(lat);
                                  loc.setLongitude(lng);
                                  if (type.equals(“alien”)) {
                                           Intent startIntent = new Intent(BURN, data);
                                           startIntent.putExtra(“latitude”, lat);
                                           startIntent.putExtra(“longitude”, lng);
                                           context.startActivity(startIntent);
                                  }
                         }
                 }
                       Đă g ký Broadcast Receivers trong file Manifest:
                         <receiver Android:name =
                                       ”.LifeformDetectedBroadcastReceiver” >
                                <intent-filter>
                         <action Android:name =
                                ”com.paad.action.NEW_LIFEFORM”/>
                                </intent-filter>
                         </receiver>
                       Đă g ký Broadcast Receivers sử dụng code:
                             // tạo và đăng ký broadcast receiver.
                             IntentFilter filter = new

                 IntentFilter(NEW_LIFEFORM_DETECTED);
                               LifeformDetectedBroadcastReceiver r = new

                 LifeformDetectedBroadcastReceiver();
                             registerReceiver(r, filter);



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                    42
Tìm hiểu lập trình trên Android


4.2 GIỚI THIỆU ADAPTERS:
     Adapter là cầu nối để liên kết dữ liệu với giao diện người dùng..

     4.2.1 Một số Adapter :
               Để sử dụng được Adapter ta phải kế thừa lớp trừu tượng AdapterView,
     và chúng ta cũng có thể tạo ra một Adapter tùy ý bằng cách này.
               ArrayAdapter:        là một lớp chung để gắn các Adapter Views vào một
     mảng đối tượng, theo mặc định thì ArrayAdapter liên kết cá giá trị toString của
     từng đối tượng ra TextView trong layout, chúng ta có thể thay thế TextView
     bằng các điều khiển khác phức tạp hơn bằng cách sử dụng kỹ thuật Overriding
     phương thức getView()
               SimpleCursorAdapter : dùng để liên kết các View với con trỏ để trả về
     câu truy vấn cho Content Provider, nó được định nghĩa trong file XML layout
     và liên kết các giá trị ràng buộc bên trong mỗi cột kết quả với View trong
     layout.

     4.2.2 Sử dụng Adapter hiển thị dữ liệu:
               Để áp dụng        một Adapter đến một class AdapterView ta chỉ cần gọi
     phương thức setAdapter của View đưa vào trong tập Adapter được minh họa
     trong đoạn code sau:
                       ArrayList<String> myStringArray = new ArrayList<String>();
                       ArrayAdapter<String> myAdapterInstance;
                       int layoutID = Android.R.layout.simple_list_item_1;
                       myAdapterInstance = new ArrayAdapter<String>
                                                      (this, layotID,myStringArray);
                       myListView.setAdapter(myAdapterInstance);
           SimpleCursorAdapter cho phép chúng ta load dữ liệu từ Cursor đến List
     View. SimpleCursorAdapter được tạo ra bằng cách truyền vào các tham số bối
     cảnh(context) hiện hành, một layout, một Cursor và hai giá trị: tên các cột và
     một mảng các giá trị chứa dữ liệu cột để hiển thị:
               String uriString = “content://contacts/people/”;
               Cursor myCursor = managedQuery(Uri.parse(uriString), null, null, null, null);
               String[] fromColumns = new String[] {People.NUMBER, People.NAME};
               int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView};
               SimpleCursorAdapter myAdapter;
               myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout,
                                                                           myCursor,
                                                                           fromColumns,




SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                        43
Tìm hiểu lập trình trên Android

                                                                                toLayoutIDs);
                  myListView.setAdapter(myAdapter);

4.3 VÍ DỤ SỬ DỤNG INTENT ĐỂ LIÊN LẠC GIỮA CÁC ACTIVITY:
       Chúng ta có 2 lớp Activity: Activity1 và Activity2. Thiết lập 2 layout cho 2
Activities trên ứng với mỗi lớp trên sẽ có layout tuần tự sau: activity1.xml,
activity2.xml.




                                                         4-5

Tiếp theo đăng ký trong Manifest:
        <activity Android:name="com.IntentsDemo.Activity1"
           Android:label="@string/app_name">
       <intent-filter>
         <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
   <activity Android:name="com.IntentsDemo.Activity2"
           Android:label="@string/app_name">
      <intent-filter>
                          <action Android:name="Calculator"></action>
                  <category Android:name="Android.intent.category.DEFAULT" />
                          </intent-filter>
    </activity>
Trong Activity1.java: xử lý 2 sự kiện, nhận về giá trị được gửi từ Activity2, gọi và
truyền giá trị vào Activity2.

   -    Hàm xử lý khi click Button:
                  //xử lý button được nhấn
                            @Override
                                   public void onClick(View v) {

                                            // Tạo intent mới và đặt action = "Calculate"
                                Intent intent = new Intent();
                                intent.setAction("Calculator");

                                //tự sát activity(có nghĩa là kết thúc nó rồi đấy)
                                             //finish();
                  }

   -    Hàm nhận giá trị:



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                         44
Tìm hiểu lập trình trên Android

        //xử lý kết quả trả về từ Activity Result
          @Override
           protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              //đúng pass không
              if(requestCode != INTENT_REQUEST_CODE) {
                 txtNum1.setText("");
                 txtNum2.setText("");
                 return;
              }
                    //nếu đúng là intent từ Activity Result
              else if(resultCode == RESULT_OK){
                         //Lấy kết quả được trả về
                 String strNum1 = data.getStringExtra("sA");
                 String strNum2 = data.getStringExtra("sB");
                         //Thiết lập giá trị mới cho 2 Editbox
                 txtNum1.setText(strNum1);
                 txtNum2.setText(strNum2);
              }
              else if(resultCode == RESULT_CANCELED){
                 txtNum1.setText("0");
                 txtNum2.setText("0");
              }
           }

Trong Activity2: xử lý 2 sự kiện, nhận về giá trị được gửi từ Activity1, gọi và truyền
giá trị vào Activity1.

    -   Hàm xử lý khi click Button:
@Override
        public void onClick(View v) {
                        Intent returnResult = new Intent("Calculator");
           // Lấy dữ liệu sau khi đã tính toán
           String strMul = txtMul.getText().toString();
           String strSum = txtSum.getText().toString();
           // �?ưa dữ liệu vào Extras của intent
           returnResult.putExtra("sA", strSum);
           returnResult.putExtra("sB", strMul);
           // Kiểm tra dữ liệu, nếu rỗng thì gửi mã CANCEL
           // ,nếu không gửi mã OK và intent chứa kết quả
           if(strSum.equals("") || strMul.equals(""))
               setResult(RESULT_CANCELED,returnResult);
           else
               setResult(RESULT_OK,returnResult);
           // Thông báo kết thúc Activity
           finish();
                        }
  - Hàm nhận giá trị: trong onCreate()
      // Lấy dữ liệu gửi từ Activity 1 qua intent
           String strA = getIntent().getStringExtra("A");
           String strB = getIntent().getStringExtra("B");
           // Tính toán với dữ liệu
           int A = Integer.parseInt(strA);



SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam                                                      45
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final

Contenu connexe

Tendances

Slides Lập trình mạng
Slides Lập trình mạngSlides Lập trình mạng
Slides Lập trình mạngasakebigone
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGThùy Linh
 
Giáo trình Quản trị mạng
Giáo trình Quản trị mạngGiáo trình Quản trị mạng
Giáo trình Quản trị mạngTran Tien
 
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...Vi Thái
 
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị androidXây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị androidTrần Võ Khôi Nguyên
 
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...Dịch vụ Làm Luận Văn 0936885877
 
Hướng dẩn sử dụng Leaflet cơ bản
Hướng dẩn sử dụng Leaflet cơ bảnHướng dẩn sử dụng Leaflet cơ bản
Hướng dẩn sử dụng Leaflet cơ bảnMinhtuan Chau
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánNgo Trung
 
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền androidĐồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền androidlaonap166
 
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng pythonBáo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng pythonjackjohn45
 
Báo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmBáo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmThuyet Nguyen
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởThuyet Nguyen
 

Tendances (20)

Slides Lập trình mạng
Slides Lập trình mạngSlides Lập trình mạng
Slides Lập trình mạng
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
 
Đề tài: Xây dựng ứng dụng Android nghe nhạc offline, HOT, 9đ
Đề tài: Xây dựng ứng dụng Android nghe nhạc offline, HOT, 9đĐề tài: Xây dựng ứng dụng Android nghe nhạc offline, HOT, 9đ
Đề tài: Xây dựng ứng dụng Android nghe nhạc offline, HOT, 9đ
 
Giáo trình Quản trị mạng
Giáo trình Quản trị mạngGiáo trình Quản trị mạng
Giáo trình Quản trị mạng
 
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
 
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị androidXây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
 
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
Phân tích thiết kế hệ thống thông tin quản lý bán hàng của công ty cổ phần qu...
 
Hướng dẩn sử dụng Leaflet cơ bản
Hướng dẩn sử dụng Leaflet cơ bảnHướng dẩn sử dụng Leaflet cơ bản
Hướng dẩn sử dụng Leaflet cơ bản
 
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đĐề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tán
 
Báo cáo đồ án - Thiết kế web tại Thanh Hóa
Báo cáo đồ án - Thiết kế web tại Thanh HóaBáo cáo đồ án - Thiết kế web tại Thanh Hóa
Báo cáo đồ án - Thiết kế web tại Thanh Hóa
 
Luận văn: Xây dựng mạng xã hội cho cộng đồng “gia sư - học sinh”
Luận văn: Xây dựng mạng xã hội cho cộng đồng “gia sư - học sinh”Luận văn: Xây dựng mạng xã hội cho cộng đồng “gia sư - học sinh”
Luận văn: Xây dựng mạng xã hội cho cộng đồng “gia sư - học sinh”
 
Luận văn: Tìm hiểu giải pháp ảo hóa docker và ứng dụng, HOT
Luận văn: Tìm hiểu giải pháp ảo hóa docker và ứng dụng, HOTLuận văn: Tìm hiểu giải pháp ảo hóa docker và ứng dụng, HOT
Luận văn: Tìm hiểu giải pháp ảo hóa docker và ứng dụng, HOT
 
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền androidĐồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
 
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng pythonBáo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
Báo cáo đồ án đề tài xây dựng trợ lý ảo bằng python
 
Đề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSS
Đề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSSĐề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSS
Đề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSS
 
Báo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmBáo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềm
 
Đề tài: Lập trình ứng dụng game Fun Math trên Android, HAY
Đề tài: Lập trình ứng dụng game Fun Math trên Android, HAYĐề tài: Lập trình ứng dụng game Fun Math trên Android, HAY
Đề tài: Lập trình ứng dụng game Fun Math trên Android, HAY
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mở
 
BTL Lập trình C#
BTL Lập trình C#BTL Lập trình C#
BTL Lập trình C#
 

En vedette

Hướng dẫn cài đặt phần mềm turnoffmonitor
Hướng dẫn cài đặt phần mềm turnoffmonitorHướng dẫn cài đặt phần mềm turnoffmonitor
Hướng dẫn cài đặt phần mềm turnoffmonitorlaonap166
 
Mtcv giám đốc tt cntt
Mtcv giám đốc tt cnttMtcv giám đốc tt cntt
Mtcv giám đốc tt cnttlaonap166
 
Ve ngoi nha lap trinh do hoa bang c
Ve ngoi nha lap trinh do hoa bang cVe ngoi nha lap trinh do hoa bang c
Ve ngoi nha lap trinh do hoa bang claonap166
 
Nếu bạn làm it bạn cần biết
Nếu bạn làm it  bạn cần biếtNếu bạn làm it  bạn cần biết
Nếu bạn làm it bạn cần biếtlaonap166
 
Lập trình Androi
Lập trình AndroiLập trình Androi
Lập trình AndroiDung Duong
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake phplaonap166
 
Quản lý cua hang giai khat lxt
Quản lý cua hang giai khat lxtQuản lý cua hang giai khat lxt
Quản lý cua hang giai khat lxtlaonap166
 
Ha active active bang gfs2
Ha active  active bang gfs2Ha active  active bang gfs2
Ha active active bang gfs2laonap166
 
Bao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoringBao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoringlaonap166
 
Don xin thanh lap doanh nghiep lien doanh
Don xin thanh lap doanh nghiep lien doanhDon xin thanh lap doanh nghiep lien doanh
Don xin thanh lap doanh nghiep lien doanhlaonap166
 
Báo cáo Đồ án tốt nghiệp
Báo cáo Đồ án tốt nghiệpBáo cáo Đồ án tốt nghiệp
Báo cáo Đồ án tốt nghiệpDanh Huỳnh
 
Final year project presentation in android application
Final year project presentation in android applicationFinal year project presentation in android application
Final year project presentation in android applicationChirag Thaker
 
Final Year Project Report on Self Tacit Zone (Location Based Android App)
Final Year Project Report on Self Tacit Zone (Location Based Android App)Final Year Project Report on Self Tacit Zone (Location Based Android App)
Final Year Project Report on Self Tacit Zone (Location Based Android App)Parthik Poshiya
 

En vedette (13)

Hướng dẫn cài đặt phần mềm turnoffmonitor
Hướng dẫn cài đặt phần mềm turnoffmonitorHướng dẫn cài đặt phần mềm turnoffmonitor
Hướng dẫn cài đặt phần mềm turnoffmonitor
 
Mtcv giám đốc tt cntt
Mtcv giám đốc tt cnttMtcv giám đốc tt cntt
Mtcv giám đốc tt cntt
 
Ve ngoi nha lap trinh do hoa bang c
Ve ngoi nha lap trinh do hoa bang cVe ngoi nha lap trinh do hoa bang c
Ve ngoi nha lap trinh do hoa bang c
 
Nếu bạn làm it bạn cần biết
Nếu bạn làm it  bạn cần biếtNếu bạn làm it  bạn cần biết
Nếu bạn làm it bạn cần biết
 
Lập trình Androi
Lập trình AndroiLập trình Androi
Lập trình Androi
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
 
Quản lý cua hang giai khat lxt
Quản lý cua hang giai khat lxtQuản lý cua hang giai khat lxt
Quản lý cua hang giai khat lxt
 
Ha active active bang gfs2
Ha active  active bang gfs2Ha active  active bang gfs2
Ha active active bang gfs2
 
Bao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoringBao cao-tot-nghiep-monitoring
Bao cao-tot-nghiep-monitoring
 
Don xin thanh lap doanh nghiep lien doanh
Don xin thanh lap doanh nghiep lien doanhDon xin thanh lap doanh nghiep lien doanh
Don xin thanh lap doanh nghiep lien doanh
 
Báo cáo Đồ án tốt nghiệp
Báo cáo Đồ án tốt nghiệpBáo cáo Đồ án tốt nghiệp
Báo cáo Đồ án tốt nghiệp
 
Final year project presentation in android application
Final year project presentation in android applicationFinal year project presentation in android application
Final year project presentation in android application
 
Final Year Project Report on Self Tacit Zone (Location Based Android App)
Final Year Project Report on Self Tacit Zone (Location Based Android App)Final Year Project Report on Self Tacit Zone (Location Based Android App)
Final Year Project Report on Self Tacit Zone (Location Based Android App)
 

Similaire à Bao cao-lap-trinh-android-final

Ai cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-lyAi cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-lyGiang Nguyễn
 
Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...
Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...
Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...sividocz
 
OpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng ViệtOpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng ViệtOpenerp Việt Nam
 
Iot starter
Iot starterIot starter
Iot starterGreenCap
 
Giáo trình đào tạo visual basic 6.0 fpt software solution[bookbooming.com]
Giáo trình đào tạo visual basic 6.0   fpt software solution[bookbooming.com]Giáo trình đào tạo visual basic 6.0   fpt software solution[bookbooming.com]
Giáo trình đào tạo visual basic 6.0 fpt software solution[bookbooming.com]bookbooming1
 
Linq vnese
Linq vneseLinq vnese
Linq vnesechienhm
 
Huong dan su dung ban day du
Huong dan su dung ban day duHuong dan su dung ban day du
Huong dan su dung ban day duthanh_k8_cntt
 
Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...
Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...
Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...Man_Ebook
 
Monitor theo doi_benh_nhan
Monitor theo doi_benh_nhanMonitor theo doi_benh_nhan
Monitor theo doi_benh_nhanLệnh Xung
 
Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]bookbooming1
 
Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0Vu Huynh Van
 
Giáo trình sql server đại học công nghiệp[bookbooming.com]
Giáo trình sql server   đại học công nghiệp[bookbooming.com]Giáo trình sql server   đại học công nghiệp[bookbooming.com]
Giáo trình sql server đại học công nghiệp[bookbooming.com]bookbooming1
 
85365852 do-an-tot-nghiep (1)
85365852 do-an-tot-nghiep (1)85365852 do-an-tot-nghiep (1)
85365852 do-an-tot-nghiep (1)huynhkhang1
 
50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmemNga Khổng
 
04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe web04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe webĐinh Luận
 
Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]bookbooming1
 
Giáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trình
Giáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trìnhGiáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trình
Giáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trìnhNguyễn Thế Anh Giaxaydung.vn
 
Tieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training bookTieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training bookDai Van Tuan
 

Similaire à Bao cao-lap-trinh-android-final (20)

Ai cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-lyAi cuong-ve-cac-he-thong-thong-tin-quan-ly
Ai cuong-ve-cac-he-thong-thong-tin-quan-ly
 
Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...
Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...
Luận Văn Xây Dựng Ứng Dụng Android Lấy Dữ Liệu Mới Trên Hosting Theo Thời Gia...
 
OpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng ViệtOpenERP 7.0 Release Notes Tiếng Việt
OpenERP 7.0 Release Notes Tiếng Việt
 
Iot starter
Iot starterIot starter
Iot starter
 
Giáo trình đào tạo visual basic 6.0 fpt software solution[bookbooming.com]
Giáo trình đào tạo visual basic 6.0   fpt software solution[bookbooming.com]Giáo trình đào tạo visual basic 6.0   fpt software solution[bookbooming.com]
Giáo trình đào tạo visual basic 6.0 fpt software solution[bookbooming.com]
 
Linq vnese
Linq vneseLinq vnese
Linq vnese
 
Huong dan su dung ban day du
Huong dan su dung ban day duHuong dan su dung ban day du
Huong dan su dung ban day du
 
Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...
Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...
Thiết kế hệ thống cân ô tô tự động ứng dụng cho các nhà máy công nghiệp và cá...
 
Monitor theo doi_benh_nhan
Monitor theo doi_benh_nhanMonitor theo doi_benh_nhan
Monitor theo doi_benh_nhan
 
Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]Giao trinhvisualbasic6.0[bookbooming.com]
Giao trinhvisualbasic6.0[bookbooming.com]
 
Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0Giao trinhvisualbasic6.0
Giao trinhvisualbasic6.0
 
Giáo trình sql server đại học công nghiệp[bookbooming.com]
Giáo trình sql server   đại học công nghiệp[bookbooming.com]Giáo trình sql server   đại học công nghiệp[bookbooming.com]
Giáo trình sql server đại học công nghiệp[bookbooming.com]
 
85365852 do-an-tot-nghiep (1)
85365852 do-an-tot-nghiep (1)85365852 do-an-tot-nghiep (1)
85365852 do-an-tot-nghiep (1)
 
50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem
 
04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe web04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe web
 
Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]
 
Giáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trình
Giáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trìnhGiáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trình
Giáo trình hướng dẫn cách lập biên bản nghiệm thu, hồ sơ chất lượng công trình
 
Tieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training bookTieng viet powerpoint 2010 training book
Tieng viet powerpoint 2010 training book
 
Ubuntu
UbuntuUbuntu
Ubuntu
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_ban
 

Dernier

Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Xem Số Mệnh
 
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...Nguyen Thanh Tu Collection
 
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ haoBookoTime
 
chủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìchủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìanlqd1402
 
Giáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayGiáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayLcTh15
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...Nguyen Thanh Tu Collection
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...Nguyen Thanh Tu Collection
 
đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21nguyenthao2003bd
 
.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......thoa051989
 
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Xem Số Mệnh
 
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfGieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfXem Số Mệnh
 
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptxvat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptxlephuongvu2019
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...Nguyen Thanh Tu Collection
 
2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hard
2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hard2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hard
2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hardBookoTime
 
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem Số Mệnh
 
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTrangL188166
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"LaiHoang6
 

Dernier (20)

Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
 
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
 
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
 
chủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìchủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kì
 
Giáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayGiáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hay
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA GIỮA HỌC KÌ + CUỐI HỌC KÌ 2 NĂ...
 
đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21
 
.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......
 
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
 
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfGieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
 
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptxvat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
 
2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hard
2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hard2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hard
2第二课:汉语不太难.pptx. Chinese lesson 2: Chinese not that hard
 
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
 
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
 

Bao cao-lap-trinh-android-final

  • 1. Tìm hiểu lập trình trên Android Mục lục  Chương 1. GIỚI THIỆU ANDROID .............................................................................................................5 1.1 Khái niệm về Android: ...........................................................................................................................5 1.1.1 Android khác với các hệ điều hành chạy trên thiết bị di động khác ........5 1.1.2 Đặc tính mở của Android:..........................................................................................................6 1.2 Kiến trúc của Android:...........................................................................................................................6 1.2.1 Android Platform: ............................................................................................................................7 1.2.2 Tầng Linux Kernel: ..........................................................................................................................7 1.2.3 Native Libraries: ...............................................................................................................................7 1.2.4 Tầng Runtime: ....................................................................................................................................8 1.2.5 Tầng Application Framework: ...............................................................................................8 Chương 2. MÔI TRƯỜNG LẬP TRÌNH.................................................................................................10 2.1 Giới thiệu:......................................................................................................................................................10 2.2 Android SDK: ..............................................................................................................................................10 2.3 Máy ảo Dalvik: ...........................................................................................................................................11 2.4 Các gói Java cần thiết: ..........................................................................................................................11 2.5 Thành phần chính của Eclipse khi tạo ứng dụng trên Android: ........................12 2.6 Thành phần quan trọng trong một Android Project: .................................................13 2.7 Chu kỳ sống của ứng dụng Android .........................................................................................13 2.7.1 Chu kỳ sống thành phần...........................................................................................................14 2.7.2 Activity Stack ....................................................................................................................................14 2.7.3 Các trạng thái của chu kỳ sống............................................................................................15 2.7.4 Chu kỳ sống của ứng dụng .....................................................................................................15 2.7.5 Các sự kiện trong chu kỳ sống của ứng dụng ..........................................................16 2.7.6 Thời gian sống của ứng dụng...............................................................................................16 2.7.7 Thời gian hiển thị của Activity ............................................................................................17 2.7.8 Các hàm thực thi ............................................................................................................................17 2.8 Các công cụ cần thiết để lập trình trên Android và hư ớng dẫn cài đặt:.......17 2.8.1 Các công cụ cần thiết để lập trình: ...................................................................................17 2.8.2 Các bước cài đặt .............................................................................................................................17 2.9 Bắt đầu lập trình 1 chương trình hello world đầu tiên: ...........................................20 2.10 Thành phần giao diện Android................................................................................................23 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 1
  • 2. Tìm hiểu lập trình trên Android 2.10.1 View ....................................................................................................................................................23 2.10.2 VIEWGROUP: ...............................................................................................................................23 2.11 Các Control ..............................................................................................................................................26 2.11.1 BUTTON...........................................................................................................................................26 2.11.2 LISTVIEW .......................................................................................................................................27 2.11.3 EDITTEXT.......................................................................................................................................29 2.11.4 TEXTVIEW .....................................................................................................................................30 2.11.5 CHECKBOX.....................................................................................................................................30 2.11.6 MENUOPTION .............................................................................................................................31 2.11.7 CONTEXTMENU.........................................................................................................................32 2.12 Tùy biến control (custom control):......................................................................................32 2.13 Ví dụ sử dụng Listview...................................................................................................................35 Chương 4. LẬP TRÌNH TRÊN ANDROID ...........................................................................................38 4.1 Giới Thiệu Intents: .................................................................................................................................38 4.1.1 Thành phần Intents:....................................................................................................................38 4.1.2 Sử dụng Intents khởi động cho Activities: ................................................................39 4.1.3 Intent không tường minh thực thi Activity: .............................................................40 4.1.4 Intent tường minh thực thi Activity ...............................................................................40 4.1.5 Sử dụng Intents gửi đi thông điệp ra ngoài ứng dụng hoặc Activity:...41 4.2 Giới Thiệu Adapters: ............................................................................................................................43 4.2.1 Một số Adapter : .............................................................................................................................43 4.2.2 Sử dụng Adapter hiển thị dữ liệu: ....................................................................................43 4.3 Ví dụ sử dụng Intent để liên lạc giữa các Activity:........................................................44 4.4 Kỹ thuật lưu trữ dữ liệu trong Android.................................................................................46 4.5 Lưu trữ dữ liệu ứng dụng một cách đơn giản: .................................................................47 4.5.1 Tạo và lưu dữ liệu với Share Preferences: ................................................................47 4.5.2 Truy xuất Shared Preferences.............................................................................................47 4.6 Lưu và đọc các tập tin trong Android: ....................................................................................49 4.6.1 Truy xuất các tập tin trong Resources: ........................................................................50 4.6.2 Các công cụ quản lý tập tin ....................................................................................................50 4.7 Cơ sở dữ liệu trong Android...........................................................................................................50 4.7.1 Giới thiệu SQLite: ..........................................................................................................................51 4.7.2 Cursors và Content Values: ...................................................................................................51 4.7.3 Sử dụng SQLiteOpenHelper:.................................................................................................52 4.7.4 Truy xuất và tạo Cơ sở dữ liệu không dùng SQLiteHelper:..........................52 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 2
  • 3. Tìm hiểu lập trình trên Android 4.7.5 Truy vấn cơ sở dữ liệu ..............................................................................................................52 4.7.6 Lấy kết quả từ Cursors ..............................................................................................................53 4.7.7 Thêm, cập nhật và xóa dòng:................................................................................................53 4.7.8 Thao tác trên cơ sở dữ liệu Android ..............................................................................54 4.7.9 Giới thiệu Content Providers ...............................................................................................56 4.8 Một ứng dụng Demo sử dụng ContentProvider để quản lý sách: .....................59 4.9 Maps, Geocoding, Location Based Services.......................................................................59 4.9.1 Sử dụng dịch vụ định vị ............................................................................................................59 4.9.2 Cài đặt trên môi trường giả lập với Test Providers ...........................................59 4.9.3 Cập nhật vị trí với Emulator Location Providers .................................................59 4.9.4 Chọn một Location Provider ................................................................................................60 4.9.5 Tìm một Providers có sẵn.......................................................................................................60 4.9.6 Tìm kiếm một Provider theo tiêu chí ............................................................................61 4.9.7 Tìm một địa chỉ (Finding Your Location)...................................................................61 4.9.8 Theo dõi sử di chuyển (Tracking Movement) ........................................................62 4.9.9 Sử dụng Goecoder.........................................................................................................................63 4.9.10 Reverse Geocoding..................................................................................................................63 4.9.11 Forward Geocoding ................................................................................................................64 4.9.12 Dùng MapView ...........................................................................................................................65 4.9.13 Dùng MapActivity ....................................................................................................................66 4.9.14 Sử dụng Overlay ........................................................................................................................67 4.9.15 Dùng MapController ..............................................................................................................68 4.9.16 Chú ý khi tạo một ứng dụng có sử dụng MapView ........................................69 4.10 Làm việc trên Background.........................................................................................................70 4.10.1 Giới Thiệu Services .................................................................................................................70 4.10.2 Tạo Service ....................................................................................................................................71 4.10.3 Khởi chạy, điều khiển và tương tác với Sercice ...............................................71 4.10.4 Kết nối Activities với Services........................................................................................72 4.10.5 Giới thiệu Thông báo trong Android.........................................................................74 4.10.6 Giới thiệu Notification Manager ...................................................................................74 4.10.7 Tạo thông báo .............................................................................................................................75 4.10.8 Kích hoạt thông báo ...............................................................................................................76 4.11 Sử dụng các Media APIs ................................................................................................................76 4.11.1 Chơi nhạc ........................................................................................................................................77 4.11.2 Ghi âm ...............................................................................................................................................78 4.12 Sử dụng máy ảnh ................................................................................................................................79 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 3
  • 4. Tìm hiểu lập trình trên Android 4.12.1 Cài đặt điều khiển camera .................................................................................................80 4.12.2 Sử dụng máy ảnh ......................................................................................................................80 4.12.3 Chụp ảnh ........................................................................................................................................81 Chương 5. TỔNG KẾT ......................................................................................................................................82 5.1 Kết quả đạt được:....................................................................................................................................82 5.2 Hướng phát triển của đề tài: ..........................................................................................................82 5.3 Tài liệu tham khảo: ................................................................................................................................82 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 4
  • 5. Tìm hiểu lập trình trên Android Chương 1. GIỚI THIỆU ANDROID Như chúng ta biết, hiện tại đã có hơn nửa nhân loại sử dụng máy di động để thoại và giao tiếp qua các mạng không dây. Con số 3 tỉ người này sẽ còn tăng lên và máy di động càng ngày càng "thông minh" với nhiều chức năng và dịch vụ rất hấp dẫn, cho nên thị trường máy di động thông minh sẽ vượt xa máy vi tính trong một tương lai rất gần... Vì thế việc lập trình trên thiết bị di động ngày càng phổ biến và phát triển rất mạnh mẽ. Từ nền tảng mã nguồn mở, Google đã cho ra mắt Android chạy trên các thiết bị di động. Android có rất nhiều công cụ và dụng cụ miễn phí để nghiên cứu và phát triển phần mềm trên nền tảng của nó. Tài liệu này sẽ giúp chúng ta tìm hiểu về Android và cách viết một ứng dụng trên nền tảng này. 1.1 KHÁI NIỆM VỀ ANDROID: Trước hết Android là nền tảng phần mềm dựa trên mã nguồn mở Linux OS (Kernel 2.6) cho máy di động và những phần mềm trung gian (middleware) để hổ trợ các ứng dụng mà người sử dụng cần đến. Một cách định nghĩa không quá chuyên môn thì có thể coi Android là tên một nền tảng mở cho thiết bị di động của Google (gồm hệ điều hành, middleware và một số ứng dụng cơ bản). Android sẽ đương đầu với một số hệ điều hành (viết tắt là HDH) dành cho thiết bị di dộng khác đang hâm nóng thị trường như Windows Mobile, Symbian và dĩ nhiên là cả OS X (iPhone). Có thể nói một cách nôm na rằng Android là một HDH chạy trên thiết bị di động, cũng giống như Windows, Linux hay Mac chạy trên máy vi tính vậy. 1.1.1 Android khác với các hệ điều hành chạy trên thiết bị di động khác Android đã thu hút được sự chú ý của giới công nghệ khắp toàn cầu khi đứa con của Google sử dụng giấy phép mã nguồn mở. Đó là một sản phẩm kết tinh từ ý tưởng của Khối Liên minh thiết bị cầm tay mở do Google dẫn đầu, gồm 34 thành viên với các công ty hàng đầu về công nghệ và di động toàn cầu như Qualcomm, Intel, Motorola, Texas Instruments và LG Electronics, các nhà mạng như T-Mobile, Sprint Nextel, NTT DoCoMo và China Mobile. Các nhà phát triển có thể sử dụng miễn phí bộ Kit Android Software Development để xây dựng các ứng dụng của mình. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 5
  • 6. Tìm hiểu lập trình trên Android 1.1.2 Đặc tính mở của Android: Android được xây dựng để cho phép các nhà phát triển để tạo ra các ứng dụng di động hấp dẫn, tận dụng tất cả tính năng một chiếc điện thoại đã cung cấp. Nó được xây dựng để được thực sự mở. Ví dụ, một ứng dụng có thể gọi bất kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra nhiều ứng dụng phong phú hơn cho người dùng (điều này hiện chưa có trên Windows Phone7 của Microsoft). Android được xây dựng trên mã nguồn mở Linux Kernel. Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài nguyên phần cứng trong một môi trường di động. Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ ba. Tất cả có thể được xây dựng để có thể truy cập bằng khả năng của một thiết bị di động cung cấp cho người sử dụng với một dải rộng các ứng dụng và dịch vụ. Với các thiết bị xây dựng trên Android, người dùng có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ. Với Android, một nhà phát triển có thể xây dựng một ứng dụng cho phép người dùng xem vị trí của bạn bè của họ và được cảnh báo khi họ đang có trong vùng phụ cận cho họ một cơ hội để kết nối. Android cung cấp truy cập đến một loạt các thư viện công cụ hữu ích và có thể được sử dụng để xây dựng các ứng dụng phong phú. Ví dụ, Android cho phép các thiết bị giao tiếp với nhau tạo điều kiện cho đồng đẳng rich-to-peer trong ứng dụng xã hội. Ngoài ra, Android bao gồm một tập hợp đầy đủ công cụ đã được xây dựng công phu, với việc cung cấp nền tảng phát triển, với năng suất cao và cái nhìn sâu vào các ứng dụng . 1.2 KIẾN TRÚC CỦA ANDROID: "Understanding Android" là cách mà ta tiếp cận lập trình Android và thấu hiểu kiến trúc hệ thống của nó. Chúng ta có thể không cần hiểu rõ cấu trúc của một HDH nhưng Chúng ta vẫn có thể lập trình một ứng dụng trên HDH đó, đây là điều mà nhà sản xuất muốn khi release SDK với một framework có sẵn của họ. Như chúng ta biết điều này cũng có mặt tốt và xấu. Framework là một tầng cao cấp dành cho lập trình SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 6
  • 7. Tìm hiểu lập trình trên Android viên, nó đều có giới hạn của nó, chúng ta có thể chỉ có thể lập trình những ứng dụng phổ biến nhưng không nên tiến tới những ứng dụng cao cấp đi sâu vào hệ thống của HDH. Theo cách của mình, trước khi bắt đầu học Android, chúng ta nên nghiên cứu qua bản thân HDH Android, chúng ta không cần phải hiểu rõ nó như thể nào, mục đích quan trọng nhất của chúng ta là có cái nhìn chung và toàn diện nhất về Android. 1.2.1 Android Platform: Bao gồm HDH Android đầy đủ tính năng, các ứng dụng và các tầng trung gian để developer có thể mở rộng, tùy chỉnh hoặc thêm vào các component của họ. Có 4 tầng cơ bản trong HDH Android: Application Framework, Android Runtime, Native Libraries, Linux Kernel ... Mỗi tầng làm việc đều nhờ sự giúp đỡ của tầng bên dưới. 1.2.2 Tầng Linux Kernel: Đây là nhân của HDH Android, mọi xử lý của hệ thống đều phải thông qua tầng này. Linux Kernel cung cấp các trình điều khiển thiết bị phần cứng (driver) như: camera, USB, Wifi, Bluetooth, Display, Power Management ... Android dựa trên Linux phiên bản 2.6 lựa chọn các tính năng cốt lõi như bảo mật, quản lý bộ nhớ, quản lý tiến trình, mạng stack và các trình điều khiển phần cứng. Kernel hoạt động như một lớp trừu tượng giữa phần cứng và phần mềm còn lại của hệ thống. 1.2.3 Native Libraries:  System C library - có nguồn gốc từ hệ thống thư viện chuẩn C (libc), điều chỉnh các thiết bị nhúng trên Linux.  Media Libraries - mở rộng từ PacketVideo's OpenCORE; thư viện hỗ trợ playback và recording của nhiều định dạng video và image phổ biến: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG  Surface Manager - quản lý việc hiển thị và kết hợp đồ họa 2D và 3D. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 7
  • 8. Tìm hiểu lập trình trên Android  LibWebCore - Android dùng lại webkit engine cho việc render trình duyệt mặc định của HDH Android browser và cho dạng web nhúng (như HTML nhúng)  SGL - 2D engine  3D libraries - Thư viện 3D dựa trên OpenGL ES 1.0 API, có nâng cấp tăng tốc "hardware 3D acceleration"  FreeType - render bitmap và vector font.  SQLite - quản lý database của ứng dụng. 1.2.4 Tầng Runtime: Mỗi ứng dụng Android chạy trên một proccess riêng của Dalvik VM (máy ảo). Dalvik được viết để chạy nhiều máy ảo cùng một lúc một cách hiệu quả trên cùng một thiết bị. Máy ảo Dalvik thực thi các file mang định dạng .dex (Dalvik Excutable), định dạng này là định dạng đã được tối ưu hóa để chỉ chiếm một vùng nhớ vừa đủ xài và nhỏ nhất có thể. VM chạy các class (đã được compile trước đó bởi 1trình biên dịch ngôn ngữ Java), sở dĩ VM chạy được các class này là nhờ chương trình DX tool đã convert các class sang định dạng .dex. 1.2.5 Tầng Application Framework: Đây là tầng mà Google xây dựng cho các developer để phát triển các ứng dụng của họ trên Android, chỉ bằng cách gọi các API có sẵn mà Google đã viết để sử dụng các tính năng của phần cứng mà không cần hiểu cấu trúc bên dưới. Bằng cách cung cấp một nền tảng phát triển mở, Android cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo. Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo thức, thêm các thông báo để các thanh trạng thái, và nhiều, nhiều hơn nữa. Tất cả các ứng dụng thường gồm một bộ các dịch vụ và hệ thống cơ bản sau: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 8
  • 9. Tìm hiểu lập trình trên Android  View UI dùng để xây dựng layout của ứng dụng bao gồm: list view, text field, button, dialog, form ...  Content Providers cho phép các ứng dụng có thể truy cập dữ liệu từ các ứng dụng khác (như ứng dụng của ta có thể lấy thông tin Contacts của điện thoại Android), hoặc để chia sẻ dữ liệu của riêng ứng dụng.  Resource Manager cung cấp cách thức truy cập đến non-code resources như các asset, graphic, image, music, video ...  Notification Manager cho phép tất cả các ứng dụng hiển thị thông báo của mình trên HDH.  Activity Manager quản lý vòng đời của các ứng dụng. Ở góc nhìn của người dùng ta có thêm tầng application (là ứng dụng do chúng ta viết), sau đây là sơ đồ tổng quát như hình 1.1: 1-1 Kiến trúc Android SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 9
  • 10. Tìm hiểu lập trình trên Android Chương 2. MÔI TRƯỜNG LẬP TRÌNH 2.1 GIỚI THIỆU: Trong chương này sẽ giới thiệu các công cụ lập trình cho Android (Android Development Tools). Chúng ta sẽ dần làm quen với Eclipse và Android Development Tool plug-in, thông qua Android SDK và công cụ của nó, chạy một ứng dụng Android trên Emulator(tạm dịch là trình giả lập giao diện của Android trên PC). Với những kĩ năng đó trong tay, chúng ta sẽ tìm hiểu các gói Java packages được cung cấp trong SDK giúp nâng cao khả năng lập trình trên Android. 2-1 Môi trường lập trình trong Android Eclipse OpenSource IDE Command-Line tools  Coding •File transfer tools  Debugging •GSM simulation tester Android Development Tools Android Emulator (plug-in) •Multiple skins •Network connectivity options  SDK •Integrated with Eclipse via  Emulator profile Android Development Tools plug- configuration in  Emulator launch Android Development  Process & file system viewing  Log viewing Android Device •Physical phone hardware SDK Documentation 2.2 ANDROID SDK: Android SDK, viết tắt của Android Software Development Kit, có thể gọi là “công cụ phát triển phần mềm” mà cụ thể ở đây là phát triển ứng dụng cho Android OS. Đến đây thì chắc các chúng ta cũng đã hiểu đơn giản Google Adroid SDK là bộ công cụ được chính Google xây dựng và phát hành miễn phí đến giới Developer để họ dễ dàng xây dựng và phát triển các ứng dụng chạy được trên Android OS. Android SDK có các đặc tính sau:  Được phát triển và cung cấp miễn phí SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 10
  • 11. Tìm hiểu lập trình trên Android  Truy cập đến phần cứng Wi-Fi.  GSM, EDGE và tính năng mạng 3G cho phép việc chuyển dữ liệu, gọi điện hay gửi tin SMS trong mạng di động.  Gói API toàn diện cho các dịch vụ nền tảng ví dụ như GPS.  Truy cập toàn bộ phần cứng điều khiển đa phương tiện như chơi nhạc, ghi âm hay sử dụng microphone và camera.  Chia sẻ dữ liệu trong kho dữ liệu.  Tích hợp trình duyệt dựa trên bộ WebKit (mã nguồn mở).  P2P hổ trợ sử dung Google Talk.  Hỗ trợ tốt đồ họa 3D nhờ sử dụng OpenGL ES. Android SDK cần phải được cài đặt để xây dựng các ứng dụng Android. Android SDK bao gồm tài liệu tích hợp HTML_base lõi chính của Javadoc để thể hiện các gói và lớp trong Java. 2.3 MÁY ẢO DALVIK: Một trong những thành phần quan trọng của Android là máy ảo Dalvik. Thay vì sử dụng máy ảo Java như trước kia Android sử dùng máy ảo của riêng nó được thiết kế để bảo đảm rằng đa ứng dụng có thể chạy mượt mà trên một thiết bị di động. Máy ảo Dalvik sử dụng lõi Linux để xử lý các chức năng ở mức thấp bao gồm bảo mật, các tiến trình, các luồng và quản lý vùng nhớ. Nó cũng có thể viết bằng ứng dụng C/C++ để chạy trực tiếp lên lõi Linux bên dưới. Giữa phần cứng và các dịch vụ hệ thống được quản lý bởi máy ảo Dalvik, nó là một thành phần ở giữa. Bằng cách sử dụng máy ảo này để chạy ứng dụng, các nhà phát triển hoàn toàn không phải bận tâm gì về các phần cứng bên dưới. Khi máy ảo này chạy nó sẽ tạo ra tập tin có đuôi là .dex, tập tin này được SDK tạo ra bởi sự chuyển đổi từ các lớp biên dịch ngôn ngữ Java . 2.4 CÁC GÓI JAVA CẦN THIẾT:  java.lang —gói chứa các lớp lõi của Java  java.io —xuất nhập.  java.net —kết nối mạng. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 11
  • 12. Tìm hiểu lập trình trên Android  java.util _ chứa các lớp tiện ích. Bao gồm: Log thường được dùng đề viết LogCat.  java.text —tiện ích sử lý văn bản.  java.math —các lớp toán học.  javax.net —các lớp mạng.  javax.security —Security-related classes.  javax.xml —các lớp liên quan đến DOM-based XML.  org.apache.* — các lớp liên quan đến HTTP-related.  org.xml —các lớp liên quan đến SAX-based XML . Các gói dùng cho lập trình Android:  Android.app—Android application model access  Android.content—truy xuất dữ liệu trong Android  Android.net—bao gồm Uri class dùng cho việc truy xuất các nội dung khác  Android.graphics—đồ họa  Android.opengl—các lớp OpenGL  Android.os—truy cập ở mức độ hệ thông đến môi trường Android  Android.provider—các lớp liên quan đến ContentProvider  Android.telephony—khả năng truy cập Telephony  Android.text—Text layout  Android.util—tập các tiện thao tác trên văn bản,bao gồm XML  Android.view—thành phần UI (giao diện người dùng)  Android.webkit—Browser functionality  Android.widget—thành phần UI mức độ cao hơn Trong đó các gói gần như là lõi của mọi ứng dụng trên Android đó là Android.app, Android.view và Android.content. 2.5 THÀNH PHẦN CHÍNH CỦA ECLIPSE KHI TẠO ỨNG DỤNG TRÊN ANDROID:  Môi trường phát triển Rich Java bao gồm trình biên dịch, class autocompletion, và tích hợp Javadoc  Bẫy lỗi code SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 12
  • 13. Tìm hiểu lập trình trên Android  Quản lý và chạy Android Emulator profile  The Dalvik Debug Monitoring Service (DDMS)  Khung nhìn các tiến trình (Thread and heap views)  Quản lý Hệ thống tập tin giao diện (Emulator filesystem management)  Điều khiển dữ liệu và hội thoại (Data and voice network control)  Điều khiển giao diện (Emulator control)  Ghi lỗi hệ thống và ứng dụng (System and application logging) 2.6 THÀNH PHẦN QUAN TRỌNG TRONG MỘT ANDROID PROJECT:  Activity (Android.app.Activity): đây là lớp khởi tạo giao diện ứng dụng nội bộ trên Android tương tư như MIDlet trong J2ME.  Service (Android.app.Service): cung cấp các dịch vụ liên quan đến client/service. Một Service sẽ chạy ngầm bên dưới, sau đó các client (Activity) sẽ kết nối và truy xuất các hàm trên dịch thông qua Interface class.  Broadcast receiver (Android.content.BroadcastReceiver): đây là một ứng dụng chạy ngầm dùng để đọc và cập nhật thông tin trên UI, ví dụ như cập nhật sự thay đỗi giờ, pin...  Content Provider: cung cấp chức năng truy vấn dữ liệu giữa các ứng dụng của Android.  Intent: nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc mà chúng ta mong muốn. 2.7 CHU KỲ SỐNG CỦA ỨNG DỤNG ANDROID Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng khi codes cần được xây dựng, khởi chạy và sẽ còn chạy cho đến khi:  Nó không phụ thuộc.  Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 13
  • 14. Tìm hiểu lập trình trên Android Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của tiến trình ứng dụng không được điều khiển trực tiếp bởi chính nó. Thay vào đó, nó được xác định bởi hệ thống qua một kết hợp của:  Những phần của ứng dụng mà hệ thống biết đang chạy.  Những phần đó quan trọng như thế nào đối với người dùng.  Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống. 2.7.1 Chu kỳ sống thành phần Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi tạo và đến thời điểm kết thúc, đôi lúc chúng có thể là active (visible hoặc invisible) hoặc inactive. 2.7.2 Activity Stack Bên trong hệ thống các activity được quản lý như một activity stack. Khi một Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đang chạy activity trước sẽ ở bên dưới activity mới và sẽ không thấy trong suốt quá trình activity mới tồn tại. Nếu người dùng nhấn nút Back thì activity kết tiếp của stack sẽ di duyển lên và trở thành active. Hình 2-2 Activity stack SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 14
  • 15. Tìm hiểu lập trình trên Android 2.7.3 Các trạng thái của chu kỳ sống Hình 2-3 Chu kỳ sống của Activity Một Activity chủ yếu có 4 chu kỳ chính sau:  Active hoặc running: Khi Active là được chạy trên màn hình. Activity này tập trung vào những thao tác của người dùng trên ứng dụng.  Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ đầy màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ.  Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái và thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác.  Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó. 2.7.4 Chu kỳ sống của ứng dụng Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành phần đều có một chu trình sống riêng. Và ứng dụng chỉ được gọi là kết thúc khi SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 15
  • 16. Tìm hiểu lập trình trên Android tất cả các thành phần trong ứng dụng kết thúc. Activity là một thành phần cho phép người dùng giao tiếp với ứng dụng. Tuy nhiên, khi tất cả các Activity kết thúc và người dùng không còn giao tiếp được với ứng dụng nữa nhưng không có nghĩa là ứng dụng đã kết thúc. Bởi vì ngoài Activity là thành phần có khả năng tương tác người dùng thì còn có các thành phần không có khả năng tương tác với người dùng như là Service, Broadcast receiver. Có nghĩa là những thành phần không tương tác người dùng có thể chạy background dưới sự giám sát của hệ điều hành cho đến khi người dùng tự tắt chúng. 2.7.5 Các sự kiện trong chu kỳ sống của ứng dụng Nếu một Activity được tạm dừng hoặc dừng hẳn, hệ thống có thể bỏ thông tin khác của nó từ vùng nhớ bởi việc gọi hàm finish() của nó, hoặc đơn giản giết tiến trình của nó. Khi nó được hiển thị lần nữa với người dùng, nó phải được hoàn toàn restart và phục hồi lại trạng thái trước. Khi một Activity chuyển qua chuyển lại giữa các trạng thái, nó phải báo việc chuyển của nó bằng việc gọi hàm transition. Hình 2-4 Tất cả các phương thức là những móc nối mà chúng ta có thể override để làm tương thich công việc trong ứng dụng khi thay đổi trạng thái. Tất cả các Activity bắt buộc phải có onCreate() để khởi tạo ứng dụng. Nhiều Activity sẽ cũng hiện thực onPause() để xác nhận việc thay đổi dữ liệu và mặt khác chuẩn bị dừng hoạt động với người dùng. 2.7.6 Thời gian sống của ứng dụng Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một Activity. Thời gian sống của một Activity diễn ra giữa lần đầu tiên gọi onCreate() đến trạng thái cuối cùng gọi onDestroy(). Một Activity khởi tạo SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 16
  • 17. Tìm hiểu lập trình trên Android toàn bộ trạng thái toàn cục trong onCreate(), và giải phóng các tài nguyên đang tồn tại trong onDestroy(). 2.7.7 Thời gian hiển thị của Activity Visible lifetime của một activity diễn ra giữa lần gọi một onStart() cho đến khi gọi onStop(). Trong suốt khoảng thời gian này người dùng có thể thấy activity trên màn hình, có nghĩa là nó không bị foreground hoặc đang tương tác với người dùng. Giữa 2 phương thức người dùng có thể duy trì tài nguyên để hiển thị activity đến người dùng. 2.7.8 Các hàm thực thi  OnCreate(...): hàm này được gọi khi lớp Activity được khởi tạo, dùng để thiết lập giao diện ứng dụng và thực thi những thao tác cơ bản.  onStart(): hàm này được gọi khi lớp ứng dụng xuất hiện trên màn hình.  onResume(): hàm được gọi ngay sau OnStart hoặc khi người dùng focus ứng dụng, hàm này sẽ đưa ứng dụng lên top màn hình.  onPause(): hàm được gọi khi hệ thống đang focus đến 1 activity trước đó.  onStop(): hàm được gọi khi một activity khác được khởi động và focus.  onRestart(): đưọc gọi khi ứng dụng chuyển sang onStop(), nhưng muốn khởi động lại bằng onStart(). 2.8 CÁC CÔNG CỤ CẦN THIẾT ĐỂ LẬP TRÌNH TRÊN ANDROID VÀ ƯỚNG DẪN CÀI ĐẶT: 2.8.1 Các công cụ cần thiết để lập trình:  Hệ điều hành: Window XP, Win7  Công cụ lập trình: Eclipse version 3.6 hoặc cao hơn  Bộ công cụ Android SDK 2.8.2 Các bước cài đặt: Chúng ta có 3 bước chính: Cài đặt Eclipse IDE, Plugin Android cho Eclipse và cuối cùng là cài đặt Emulator (Android SDK). Và được chia thành các bước nhỏ sau: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 17
  • 18. Tìm hiểu lập trình trên Android  Bước 1: Vào địa chỉ http://www.eclipse.org/downloads/ download phần mền lập trình eclipse. Chọn phần Eclipse IDE cho các nhà phát triển JAVA. Sau khi đã download eclipse chúng ta giải nén ra để sử dụng. Sau khi giải nén xong cho chạy chương trình. Khi chạy, chương trình muốn lưu thư mục làm việc, chúng ta chọn thư mục tùy ý và nhấn OK.  Bước 2: truy cập www.oracle.com/technetwork/java/javase/downloads/index.html để downloads JAVA SE . Chọn downloads JAVA SE > vào thư mục chứa JAVA SE và tiến hành cài đặt.  Bước 3: Truy cập developer.Android.com/sdk/index.html . Và tiến hành download chọn phần Android-sdk_r10-windows.zip . Sau khi downloads vào thư mục chứa phần download giải nén và chọn SDK Manager.exe chạy chương trình tự động update. Vào chương trình eclipse chọn menu Help -> Install New Software… Name: Google Android ( tùy ý) Location : http//:dl-ssl-google.com/Android/eclipse Sau đó chọn OK. Hình 2-5 Chọn Sellect All , chọn vào các ô như hình 2.7 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 18
  • 19. Tìm hiểu lập trình trên Android Hình 2-6 Sau đó chương trình tự động cập nhật những bản cần để cài đặt. Tiếp theo bạn chọn những phần cần thiết để cài đặt hoặc chọn tất cả -> Next -> chọn I accept the terms of the license agreements ->finsh. Lưu ý khi cài: windows muốn chứng thực, ở bước này chọn OK. Sau khi đã cài xong chọn Restsart Now.  Bước 4: Khi chương trình đã cài đặt phần Android SDK hoàn tất và khởi động lại chương trình, vào Window ->Prefeneces để chỉ đường dẫn của file SDK. Hình 2-7 Ở bước này chọn đường dẫn tới thư mục chứa Android SDK. Sau đó chọn Apply.  Bước 5: Ở các bước trên đã cấu hình Android SDK trong eclipse , bước tiếp theo sẽ đi cấu hình để tạo ra 1 máy ảo chứa hệ điệu hành Android. Vào Window -> Android SDK and AVD Manager. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 19
  • 20. Tìm hiểu lập trình trên Android Cửa sổ Android SDK and AVD Manager hiện ra , chương trình đang tự động cập nhật. Sau đó chọn Virtual Decvices -> New. Name ( Tên máy ảo) : AndroidMobile2.2 Size (kích thước bộ nhớ ): 512 MB Chọn Create AVD Hình 2-8 Đã tạo thành công máy ảo , tiếp theo chọn Start…..-> Launch để khởi động máy ảo. Hình 2-9 2.9 BẮT ĐẦU LẬP TRÌNH 1 C ƯƠNG TRÌN ELLO WORLD ĐẦU TIÊN: Lưu ý ở đây tôi dùng Emulator bảng 2.2. Mở Eclipse SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 20
  • 21. Tìm hiểu lập trình trên Android Chọn File > New > Project… Chọn Android Project và đặt tên như hình bên dưới nhé: Dòng Project Name: HelloAndroid Dòng Application Name: HelloAndroid Package name: com.HelloAndroid Activity name: HelloAndroid_Activity Min SDK version : 8 2-10 Thế là chúng ta đã có 1 ứng dụng nhỏ rồi đó. Sau đó khởi động Android Emulator bằng cách vào menu Window > Android SDK and ADV manager > chọn thiết bị đã tạo ở phần trên và click Start…>Launch. Hình 2.13 Vậy là ta đã có 1 chiếc điện thoại Mobile Android chạy ngay trên máy tính rồi đó. Bây giờ chúng ta quay về màn hình Eclipse và Click vào Run…> chọn Android Application > OK SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 21
  • 22. Tìm hiểu lập trình trên Android Chúng ta có được ứng dụng cho hình sau: 2-11 Bây giờ chúng ta sẽ tìm hiểu sâu hơn về ứng dụng này. Quay lại màn hình Eclipse lần lượt vào các mục : Src>HelloAndroid_Activity.java Res> layout>main.xml Res>values>string.xml Đây chính là 3 file quan trọng trong một ứng dụng Android Bây giờ chúng ta vào file String.xml thay dòng <string name="hello">Hello World, HelloAndroid_Activity!</string> Bằng dòng <string name="hello">Xin chào Android!</string> Và run… chúng ta sẽ tạo ra 1 ứng dụng có giao diện thuần Việt đúng nghĩa. 2-12 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 22
  • 23. Tìm hiểu lập trình trên Android 2.10 THÀNH PHẦN GIAO DIỆN ANDROID 2.10.1 View View GroupView Control Ưw Layout Widget (compound control) Control Control Control 2-13 Trong Android giao diện người dùng được xây dựng từ các đối tượng View. Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình trên. Một screen là một tập hợp các Layout và các widget được bố trí có thứ tự. Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cần phải được gọi một hàm là setContentView (R.layout.main); hàm này sẽ load giao diện từ file MAIN.XML lên để phân tích thành mã bytecode. 2.10.2 VIEWGROUP: ViewGroup là sự mở rộng của class View hay nói cách khác ViewGroup chính là các WidgetLayout được dùng để bố trí các đối tượng khác trong một screen.Có các loại ViewGroup như sau:  Linear Layout LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang hoặc chiều dọc nhưng trên một line duy nhất mà không có xuống dòng.  Frame layout FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như làcác Layer trong Photoshop. Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất bởi các đối tượng thuộc Layer nằm trên. FrameLayer thường được sử dụng khi muốn tạo ra các đối tượng có khung hình bên ngoài chẳng hạn như contact image button. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 23
  • 24. Tìm hiểu lập trình trên Android  Table layout Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần bố trí các widget theo các row và column. Chẳng hạn như, giao diện của một chiếc máy tính đơn giản hoặc một danh sách dữ liệu.  AbsoluteLayout Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layout dựa vào 2 thuộc tính toạ độ x, y. Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệ khoảng cách giữa các đối tượng. Khi chuyển ứng dụng sang một màn hình có kích thước với màn hình thiết kế ban đầu thì vị trí của các đối tượng sẽ không còn được chính xác như ban đầu. Dùng câu lệnh <AbsoluteLayout></ AbsoluteLayout> để gọi Layout này. Muốn định vị một đối tượng, phải định vị hai giá trị Android:layout_x="…" và Android:layout_y="…". <AbsoluteLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:id="@+id/mainlayout"> <Button Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:text="placed at 100,130 pixels (px)" Android:layout_x="100px" Android:layout_y="130px" /> <AbsoluteLayout> Ví dụ: Thử tạo ra những button và cho những button này nằm ở những vị trí khác nhau: Các button này nằm ở những vị trí khác nhau với các chỉ số đo lường khác nhau. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 24
  • 25. Tìm hiểu lập trình trên Android Hình 3.4  RELATIVE LAYOUT Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc. Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng buộc nào đó với các widget khác. Các ràng buộc này là các ràng buộc trái, phải, trên, dưới so với một widget hoặc so với layout parent. Dựa vào những mối ràng buộc đó mà RetaliveLayout cũng không phụ thuộc vào kích thước của screen thiết bị. Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng nhằm mục đích giảm lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý. 2-14 Bố trí widget trong RetaliveLayout Các đối tượng trong Layout này phải có id để tạo mối quan hệ giữa các đối tượng. Android:layout_alignParentRight="true" câu lệnh này giúp đối tượng sau không nằm đè lên đối tượng trước đó. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 25
  • 26. Tìm hiểu lập trình trên Android Android:layout_marginLeft="…" cho biết đối tượng nằm cách lề phải và trái bao nhiêu. Đối tượng sau muốn tạo mối quan hệ với đối tượng trước, và muốn cho hai đối tượng nằm ở vị trí nào thì sử dụng câu lệnh: <Android:layout_alignTop= "@id/…"> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:layout_width="fill_parent" Android:layout_height="fill_parent"> <Button Android:id="@+id/ok" Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:layout_alignParentRight="true" Android:layout_marginLeft="10dip" Android:text="Test" /> <Button Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:layout_alignTop="@id/ok" Android:text="Test" /> </RelativeLayout> 2.11 CÁC CONTROL 2.11.1 BUTTON Sở dĩ widget button được giới thiệu đầu tiên trong số các widget khác là vì đây là đối tượng có thể nói là được dùng nhiều nhất trong hầu hết các ứng dụng Android. Để thiết kế giao diện với một button ta có 2 cách như sau: <Button Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:id="@+id/cmdButton1" Android:text="Touch me!" /> Đây là cách làm ra một button đơn giản. Đoạn mã trên sau khi chạy: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 26
  • 27. Tìm hiểu lập trình trên Android 2-15 Thực ra nếu không phải đòi hỏi phải custom lại một widget thì không cần phải sử dụng tới code. Trong một số trường hợp bắt buộc chúng ta phải custom các widget để cho phù hợp với hoàn cảnh. Chẳng hạn như trong game, các menu hay các nút điều khiển,… Để khai báo một Button trong code ta làm như sau: void showButton() { setContentView(R.layout.button); Button next = (Button) findViewById(R.id.btnButton); next.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Toast.makeText(getApplicationContext(), "Bạn vừa click vào Button", Toast.LENGTH_SHORT).show(); } }); } nh 2-16 2.11.2 LISTVIEW Được sử dụng để thể hiện một danh sách các thông tin theo từng cell. Mỗi cell thông thường được load lên từ một file XML đã được cố định trên đó số lượng thông tin và loại thông tin cần được thể hiện. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 27
  • 28. Tìm hiểu lập trình trên Android Để thể hiện được một list thông tin lên một screen thì cần phải có 3 yếu tố chính:  Data Source: Data Source có thể là một ArrayList, HashMap hoặc bất kỳ một cấu trúc dữ liệu kiểu danh sách nào.  Adapter: Adapter là một class trung gian giúp ánh xạ dữ liệu trong Data Source vào đúng vị trí hiển thị trong ListView. Chẳng hạn, trong Data Source có một trường name và trong ListView cũng có một TextView để thể hiện trường name này. Tuy nhiên, ListView sẽ không thể hiển thị dữ liệu trong Data Source lên được nếu như Adapter không gán dữ liệu vào cho đối tượng hiển thị.  ListView: ListView là đối tượng để hiển thị các thông tin trong Data Source ra một cách trực quan và người dùng có thể thao tác trực tiếp trên đó. 2-17 Để gọi đối tượng ListView trong xml. Mỗi ListView phải có ID để gọi trong Activity. <ListView Android:id="@+id/ListView01" Android:layout_width="wrap_content" Android:layout_height="wrap_content" /> Để tạo các đối tượng trong file Activity thì phải khai báo: public class TestActivity extends Activity { private ListView lv1; private String lv_arr[] = {"Android","iPhone","BlackBerry","AndroidPeople"}; @Override public void onCreate(Bundle icicle) SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 28
  • 29. Tìm hiểu lập trình trên Android { super.onCreate(icicle); setContentView(R.layout.main); lv1=(ListView)findViewById(R.id.ListView01); // By using setAdpater method in listview we an add string array in list. lv1.setAdapter(new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_ 1 , lv_arr)); } Ví dụ: Tạo ra một ListView gồm các thành phần Android, iPhone, BlackBerry, AndroidPeople: 2-18 2.11.3 EDITTEXT Trong Android đối tượng EditText được sử dụng như một TextField hoặc một TextBox. Giá trị Android:singleLine bằng false, edittext sẽ là 1 Texbox, ngược lại nó là 1 Textfield. <EditText Android:id="@+id/EditText01" Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:textStyle="bold" Android:textSize="20dip" Android:textColor="#000000" Android:text="Hello Android!" Android:singleLine="true" Android:inputType="textCapWords" /> SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 29
  • 30. Tìm hiểu lập trình trên Android 2-19 2.11.4 TEXTVIEW TextView có tác dụng là để hiển thị văn bản. <TextView Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:text="Hello World! Demo TextView" Android:textColor="#07a931" Android:textSize="20px" Android:gravity="center_horizontal" /> Trong đoạn mã trên, Android:text="" dùng để ghi đoạn text muốn thể hiện, Android:textColor="" để định dạng màu chữ, Android:textSize="" kích cở chữ, Android:gravity="" dùng để canh chỉnh cho đoạn text. Nếu muốn tìm hiểu thêm, hãy gõ Android: sau đó nhấn Crtl+ Space để tìm hiểu thêm về các thuộc tính của nó. 2.11.5 CHECKBOX Nhận hai giá trị true hoặc false. Đối tượng CheckBox cho phép chọn nhiều item cùng một lúc. XML: <CheckBox Android:id="@+id/CheckBox01" Android:layout_width="wrap_content" SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 30
  • 31. Tìm hiểu lập trình trên Android Android:layout_height="wrap_content" Android:text="True" Android:checked="true" /> Kết quả như sau: 2-20 2.11.6 MENUOPTION Có 2 cách tạo một MenuOptions: Tạo bằng code và tập tin XML, dưới đây chúng ta dùng XML h 2-21 Khai báo bằng code XML: <menu xmlns:Android="https://schemas.Android.com/apk/res/Android"> <item Android:id="@+id/checkbox" Android:title="Checkbox" /> <item Android:id="@+id/button" Android:title="Button" /> <item Android:id="@+id/edittext" Android:title="Edittext" /> //tiếp tục cho các menu khác ……… SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 31
  • 32. Tìm hiểu lập trình trên Android </menu> 2.11.7 CONTEXTMENU ContextMenu được sử dụng để hiển thị các tuỳ chọn khi người dùng nhấn dài vào một Button trên màn hình. Để tạo một ContextMenu ta cũng có 2 cách giống như tạo MenuOptions ở trên chỉ khác tên phương thức. Phương thức: onCreateContextMenu( ContextMenu menu, View v, ContextMenuInfo menuInfo) sẽ được gọi và truyền vào 3 tham số là:  ContextMenu: đối tượng để add các context menu item  View: Đối tượng nơi mà xảy ra sự kiện  ContextMenuInfo: Cho biết vị trí xảy ra sự kiện trong ListView. 2-22 2.12 TÙY BIẾN CONTROL (CUSTOM CONTROL): Chúng ta đã biết Android đã cung cấp cho chúng ta rất nhiều Control hữu ích.Tuy nhiên ứng dụng của chúng ta đôi khi cũng cần những control do chính chúng ta tạo ra để đáp ứng các nhu cầu của ứng dụng mà việc sử dụng các control có sẵn rất khó khăn. Ở đây chúng ta sẽ tạo ra một ListView, với màu nền và màu chữ bắt mắt.  Bước 1: Tạo một Class có tên CustomListView như sau: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 32
  • 33. Tìm hiểu lập trình trên Android public class CustomListView extends TextView { //cac cong cu ve CustomListView private Paint marginPaint; private Paint linePaint; private int paperColor; private float margin; public CustomListView(Context c, AttributeSet a, int ds) { super(c, a, ds); init(); } public CustomListView(Context c) { super(c); init(); } public CustomListView(Context c, AttributeSet a) { super(c, a); init(); } private void init() { } @Override protected void onDraw(Canvas c) { //sử dụng lớp cha TextView để vẽ text super.onDraw(c); } }  Bước 2: tạo file colors.xml trong res/values. Tạo ra màu cho paper, margin, line, text. <resources> <color name="notepad_paper">#AAFFFF99</color> <color name="notepad_lines">#FF0000FF</color> <color name="notepad_margin">#09FF0000</color> <color name="notepad_text">#AA0000FF</color> </resources>  Bước 3: tạo file dimens.xml trong res/values tạo giá trị margin cho paper. <resources> <dimen name="notepad_margin">30px</dimen> </resources>  Bước 4: với những giá trị đã tạo ta tiếp tục viết code cho hàm init() đã khai báo trong file CustomListView.java: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 33
  • 34. Tìm hiểu lập trình trên Android private void init() { Resources myResources = getResources(); // tao choi ve, chung ta se su dung trong onDraw marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG); marginPaint.setColor(myResources.getColor(R.color.notepad_ margin)); linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); // lay background paper va margin width paperColor = myResources.getColor(R.color.notepad_paper); margin = myResources.getDimension(R.dimen.notepad_margin); }  Bước 5: Tiếp tục viết thêm code cho hàm onDraw() @Override protected void onDraw(Canvas c) { // ve mau cho paper c.drawColor(paperColor); //c.drawLine(startX, startY, stopX, stopY, paint) c.drawLine(0, 0, getMeasuredHeight(), 0, linePaint); c.drawLine(0, getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight(), linePaint); // ve margin c.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint); // di chuyen text khoang margin vua tao c.save(); c.translate(margin, 0); // su dung text view de render text super.onDraw(c); c.restore(); }  Bước 6: tạo một file customlistview.xml trong res/layout: <com.example.UserInterface.CustomListView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding = "10dp" android:scrollbars = "vertical" android:textColor = "@color/notepad_text" android:fadingEdge = "vertical" /> SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 34
  • 35. Tìm hiểu lập trình trên Android 2.13 VÍ DỤ SỬ DỤNG LISTVIEW  Bước 1: Khai báo trong file strings.xml và main.xml như sau: <resources> <string name="hello">Hello World, Main!</string> <string name="app_name">Ví dụ về ListView</string> <string name="str_btnAdd">Thêm</string> </resources> Và trong main.xml, chúng ta khai báo một TextView, một Button, một Listview có tên lần lượt như sau: txtItem, btnAdd, listItems.  Bước 2: Viết trong activity Main.java, sử dụng custom listview vừa tạo ở trên. ArrayList<String> arr = new ArrayList<String>(); ArrayAdapter<String> aa; String flower[]={"Hoa Lan","Hoa Huệ","Hoa Hồng"}; String animal[]={"Voi","Sư tử","Hổ"}; String currentMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnAdd = (Button) findViewById(R.id.btnAdd); txtItem = (EditText) findViewById(R.id.txtItem); listItems = (ListView) findViewById(R.id.listItems); txtItem.setOnKeyListener(this); btnAdd.setOnClickListener( this); arr = new ArrayList<String>(); //doan code su dung customlistview aa = new ArrayAdapter<String>(this,R.layout.customlistview,arr); listItems.setAdapter(aa); }  Bước 3: tạo một menu bằng đoạn code sau, trước khi tạo một menu làm theo hình sau: 2-23 public boolean onCreateOptionsMenu(Menu menu) SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 35
  • 36. Tìm hiểu lập trình trên Android { super.onCreateOptionsMenu(menu); MenuItem item; item = menu.add("Xóa"); item.setIcon(R.drawable.delete); item = menu.add("Động vật"); item.setIcon(R.drawable.animal); item = menu.add("Hoa"); item.setIcon(R.drawable.flower); return true; } public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); if (item.hasSubMenu()==false) { if (item.getTitle().toString() == "Động vật") { currentMenu = "Animal"; this.displayPopup("Chọn con vật nào?", this.animal); } if (item.getTitle().toString() == "Hoa") { currentMenu = "Flower"; this.displayPopup("Chọn hoa nào?", this.flower); } if (item.getTitle().toString() == "Xóa") { int index = listItems.getSelectedItemPosition(); this.deleteItem(index); } } return true; }  Bước 4: viết thêm các hàm xử lý sự kiện: public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { addItem(txtItem.getText().toString()); return true; } return false; } @Override public void onClick(View v) { if (v == btnAdd) { addItem(txtItem.getText().toString()); } } @Override public void onClick(DialogInterface dialog, int i) { if (currentMenu=="Animal") { this.addItem(animal[i]); } if (currentMenu=="Flower") { this.addItem(flower[i]); } } SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 36
  • 37. Tìm hiểu lập trình trên Android  Bước 5: và cuối cùng chúng ta sẽ thêm các hàm private void deleteItem(int index) { if (index>=0) { String itemName = (String) listItems.getItemAtPosition(index); arr.remove(index); aa.notifyDataSetChanged(); //hiện câu thông báo mờ khi xóa 1 item Toast.makeText(getApplicationContext(), itemName + " đã được xóa", Toast.LENGTH_SHORT).show(); } } private void displayPopup(String title, String [] item) { Builder builder = new AlertDialog.Builder(this); builder.setTitle(title); builder.setItems(item, this); builder.show(); } public void addItem(String item) { if (item.length()>0) { arr.add(item); aa.notifyDataSetChanged(); txtItem.setText(""); //hiện câu thông báo mờ khi thêm 1 item vào Toast.makeText(getApplicationContext(), item + " đã thêm", Toast.LENGTH_SHORT).show(); } }  Bước 6: Chạy chương trình và kết quả như sau: 2-24 SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 37
  • 38. Tìm hiểu lập trình trên Android Chương 4. LẬP TRÌNH TRÊN ANDROID 4.1 GIỚI THIỆU INTENTS: Intent 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 chúng ta triệu gọi cũng như truyền các dữ liệu cần thiết để thực hiện một Activity từ một Activity khác. 4-1 4.1.1 Thành phần Intents: Thực ra Intent là một cấu trúc dữ liệu được mô tả trong Android.content.Intent. 4-2  Các Action định nghĩa sẵn: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 38
  • 39. Tìm hiểu lập trình trên Android 4-3  Tự định nghĩa action: Về nguyên tắc chúng ta có thể đặt tên action của một intent là bất cứ thứ gì theo chuẩn đặt tên thông thường, hay thậm chí dùng luôn hằng action đã định nghĩa sẵn như ACTION_VIEW (hay “Android.intent.action.VIEW”). Cái tên VIEW thực chất chỉ là một tên gợi tả, chúng ta có thể dùng nó với mục đích thực hiện một activity để … gửi mail! Tuy nhiên điều đó rõ ràng là rất “ngớ ngẩn”. Thay vào đó ta hãy dùng ACTION_SEND hay ACTION_SENDTO. Việc đặt tên action cho intent đúng tên gợi tả còn có một ý nghĩa khác đó là app của chúng ta có thể được triệu gọi từ một app khác. Ví dụ chúng ta viết một app có activity đáp ứng intent ACTION_SEND và để chia sẻ một bức ảnh lên trang web của chúng ta (giống như ta làm với Facebook, Flickr etc.) Khi đó có thể app của chúng ta sẽ là một lựa chọn chia sẻ ảnh của người dùng điện thoại. 4.1.2 Sử dụng Intents khởi động cho Activities: Phổ biến nhất trong Intents là việc liên kết dữ liệu giữa các thành phần ứng dụng, Intents được dùng để bắt đầu, dừng lại và chuyển tiếp giữa các Activities trong ứng dụng. Để mở một ứng dụng khác trong một ứng dụng có sẵn thì chúng ta gọi startActivity như sau: startActivity(myIntent); Để theo dõi thông tin phản hồi từ phương thức mở ta sử dụng phương thức : startActivityForResult(Intent) SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 39
  • 40. Tìm hiểu lập trình trên Android 4-4 4.1.3 Intent không tường minh thực thi Activity: Trong trường hợp này intent không chỉ định một lớp cụ thể mà thay vào đó dùng các dữ liệu khác (action, data, type, etc.) và để hệ thống tự quyết định xem lớp nào (app nào) sẽ thích hợp để đáp ứng intent đó. Thông tin action và category của activity trong một app đáp ứng intent đó phải được khai báo trong Manifest của app (AndroidManifest.xml) dưới dạng Intent-filter (tất nhiên nếu chúng ta muốn gọi một built-in action thì ta không cần quan tâm đến vấn đề này). Ví dụ: chúng ta muốn cho phép người dùng thực hiện cuộc gọi từ một ứng dụng, hơn là thực hiện quay số mới, chúng ta có thể sử dụng một ý định ngầm yêu cầu hành động ("quay số") được thực hiện trên một điện thoại như trong đoạn mã dưới đây: if (somethingWeird && itDontLookGood) { Intent intent = newIntent(Intent.ACTION_DIAL,Uri.parse(“tel:555-2368”)); startActivity(intent); } 4.1.4 Intent tường minh thực thi Activity Như đã trình bày ở phần trên, intent có thể dùng thuộc tính phụ component để chỉ định đích danh tên lớp sẽ thực thi Activity. Để thực hiện điều này, lớp Intent cung cấp các hàm đó là setComponent(ComponentName) và setClass(Context, Class) và setClassName(Context, String) setClassName(String, String). Chỉ được dùng để gọi các Activities trong cùng một app SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 40
  • 41. Tìm hiểu lập trình trên Android Intent intent = new Intent(); intent.setClassName("ten_package", "ten_lop_ben_trong_package"); startActivity(intent); 4.1.5 Sử dụng Intents gửi đi thông điệp ra ngoài ứng dụng hoặc Activity: Là một cơ chế truyền tin cấp hệ thống, có khả năng gửi tin đến một tiến trình. Chúng ta có thể sử dụng Broadcast Receivers để nhận, để trả lời hoặc phát đi các dữ liệu mà chúng ta muốn. Broadcast Intent dùng để thông báo cho các ứng dụng khác các sự kiện của hệ thống hay ứng dụng, mở ra các mô hình lập trình hướng sự kiện giữa các ứng dụng. Broadcast Intent giúp cho ứng dụng của chúng ta cởi mở hơn bởi vì nó phát đi một sự kiện bằng cách sử dụng Intent. 4.1.5.1 Cách thực hiện gửi dữ liệu dùng Intent trong Activity: Broadcast Intent thực tế khá đơn giản, trong các thành phần ứng dụng của chúng ta, chúng ta xây dựng một Intent mà chúng ta muốn quảng bá bằng cách sử dụng sentBroadcast để gửi đi. Ví dụ : Intent intent = new Intent(NEW_LIFEFORM_DETECTED); intent.putExtra(“lifeformName”, lifeformType); intent.putExtra(“longitude”, currentLongitude); intent.putExtra(“latitude”, currentLatitude); sendBroadcast(intent); 4.1.5.2 Nhận dữ liệu với Broadcast Receiver: BroadcastReceivers được dùng để nhận dữ liệu từ Broadcast Intents, để kích hoạt BroadcastReceivers thì nó cần phải được đăng ký hoăc khai trong code hoặc trong Mainifest và chúng ta cần phải sử dụng Intents Filter để xác định Intent được phép gửi dữ liệu đến. Ví dụ: khởi tạo mới một BroadcastReceivers . import Android.content.BroadcastReceiver; import Android.content.Context; import Android.content.Intent; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //TODO: React to the Intent received. SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 41
  • 42. Tìm hiểu lập trình trên Android } } Thông thường thì BroadcastReceivers sẽ cập nhật nội dung, khởi động dịch vụ , cập nhật người dùng cuối, hoặc thông báo người sử dụng bằng cách sử dụng quản lý Notification Manager. Ví dụ đoan code sau đây cho thấy cách đăng ký BroadcastReceivers trong code hoặc trong Mainifest. public class LifeformDetectedBroadcastReceiver extends BroadcastReceiver { public static final String BURN=“com.paad. alien.action.BURN_IT_WITH_FIRE”; @Override public void onReceive(Context context, Intent intent) { // Get the lifeform details from the intent. Uri data = intent.getData(); String type = intent.getStringExtra(“type”); double lat = intent.getDoubleExtra(“latitude”, 0); double lng = intent.getDoubleExtra(“longitude”, 0); Location loc = new Location(“gps”); loc.setLatitude(lat); loc.setLongitude(lng); if (type.equals(“alien”)) { Intent startIntent = new Intent(BURN, data); startIntent.putExtra(“latitude”, lat); startIntent.putExtra(“longitude”, lng); context.startActivity(startIntent); } } }  Đă g ký Broadcast Receivers trong file Manifest: <receiver Android:name = ”.LifeformDetectedBroadcastReceiver” > <intent-filter> <action Android:name = ”com.paad.action.NEW_LIFEFORM”/> </intent-filter> </receiver>  Đă g ký Broadcast Receivers sử dụng code: // tạo và đăng ký broadcast receiver. IntentFilter filter = new IntentFilter(NEW_LIFEFORM_DETECTED); LifeformDetectedBroadcastReceiver r = new LifeformDetectedBroadcastReceiver(); registerReceiver(r, filter); SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 42
  • 43. Tìm hiểu lập trình trên Android 4.2 GIỚI THIỆU ADAPTERS: Adapter là cầu nối để liên kết dữ liệu với giao diện người dùng.. 4.2.1 Một số Adapter : Để sử dụng được Adapter ta phải kế thừa lớp trừu tượng AdapterView, và chúng ta cũng có thể tạo ra một Adapter tùy ý bằng cách này. ArrayAdapter: là một lớp chung để gắn các Adapter Views vào một mảng đối tượng, theo mặc định thì ArrayAdapter liên kết cá giá trị toString của từng đối tượng ra TextView trong layout, chúng ta có thể thay thế TextView bằng các điều khiển khác phức tạp hơn bằng cách sử dụng kỹ thuật Overriding phương thức getView() SimpleCursorAdapter : dùng để liên kết các View với con trỏ để trả về câu truy vấn cho Content Provider, nó được định nghĩa trong file XML layout và liên kết các giá trị ràng buộc bên trong mỗi cột kết quả với View trong layout. 4.2.2 Sử dụng Adapter hiển thị dữ liệu: Để áp dụng một Adapter đến một class AdapterView ta chỉ cần gọi phương thức setAdapter của View đưa vào trong tập Adapter được minh họa trong đoạn code sau: ArrayList<String> myStringArray = new ArrayList<String>(); ArrayAdapter<String> myAdapterInstance; int layoutID = Android.R.layout.simple_list_item_1; myAdapterInstance = new ArrayAdapter<String> (this, layotID,myStringArray); myListView.setAdapter(myAdapterInstance); SimpleCursorAdapter cho phép chúng ta load dữ liệu từ Cursor đến List View. SimpleCursorAdapter được tạo ra bằng cách truyền vào các tham số bối cảnh(context) hiện hành, một layout, một Cursor và hai giá trị: tên các cột và một mảng các giá trị chứa dữ liệu cột để hiển thị: String uriString = “content://contacts/people/”; Cursor myCursor = managedQuery(Uri.parse(uriString), null, null, null, null); String[] fromColumns = new String[] {People.NUMBER, People.NAME}; int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView}; SimpleCursorAdapter myAdapter; myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout, myCursor, fromColumns, SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 43
  • 44. Tìm hiểu lập trình trên Android toLayoutIDs); myListView.setAdapter(myAdapter); 4.3 VÍ DỤ SỬ DỤNG INTENT ĐỂ LIÊN LẠC GIỮA CÁC ACTIVITY: Chúng ta có 2 lớp Activity: Activity1 và Activity2. Thiết lập 2 layout cho 2 Activities trên ứng với mỗi lớp trên sẽ có layout tuần tự sau: activity1.xml, activity2.xml. 4-5 Tiếp theo đăng ký trong Manifest: <activity Android:name="com.IntentsDemo.Activity1" Android:label="@string/app_name"> <intent-filter> <action Android:name="Android.intent.action.MAIN" /> <category Android:name="Android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity Android:name="com.IntentsDemo.Activity2" Android:label="@string/app_name"> <intent-filter> <action Android:name="Calculator"></action> <category Android:name="Android.intent.category.DEFAULT" /> </intent-filter> </activity> Trong Activity1.java: xử lý 2 sự kiện, nhận về giá trị được gửi từ Activity2, gọi và truyền giá trị vào Activity2. - Hàm xử lý khi click Button: //xử lý button được nhấn @Override public void onClick(View v) { // Tạo intent mới và đặt action = "Calculate" Intent intent = new Intent(); intent.setAction("Calculator"); //tự sát activity(có nghĩa là kết thúc nó rồi đấy) //finish(); } - Hàm nhận giá trị: SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 44
  • 45. Tìm hiểu lập trình trên Android //xử lý kết quả trả về từ Activity Result @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //đúng pass không if(requestCode != INTENT_REQUEST_CODE) { txtNum1.setText(""); txtNum2.setText(""); return; } //nếu đúng là intent từ Activity Result else if(resultCode == RESULT_OK){ //Lấy kết quả được trả về String strNum1 = data.getStringExtra("sA"); String strNum2 = data.getStringExtra("sB"); //Thiết lập giá trị mới cho 2 Editbox txtNum1.setText(strNum1); txtNum2.setText(strNum2); } else if(resultCode == RESULT_CANCELED){ txtNum1.setText("0"); txtNum2.setText("0"); } } Trong Activity2: xử lý 2 sự kiện, nhận về giá trị được gửi từ Activity1, gọi và truyền giá trị vào Activity1. - Hàm xử lý khi click Button: @Override public void onClick(View v) { Intent returnResult = new Intent("Calculator"); // Lấy dữ liệu sau khi đã tính toán String strMul = txtMul.getText().toString(); String strSum = txtSum.getText().toString(); // �?ưa dữ liệu vào Extras của intent returnResult.putExtra("sA", strSum); returnResult.putExtra("sB", strMul); // Kiểm tra dữ liệu, nếu rỗng thì gửi mã CANCEL // ,nếu không gửi mã OK và intent chứa kết quả if(strSum.equals("") || strMul.equals("")) setResult(RESULT_CANCELED,returnResult); else setResult(RESULT_OK,returnResult); // Thông báo kết thúc Activity finish(); } - Hàm nhận giá trị: trong onCreate() // Lấy dữ liệu gửi từ Activity 1 qua intent String strA = getIntent().getStringExtra("A"); String strB = getIntent().getStringExtra("B"); // Tính toán với dữ liệu int A = Integer.parseInt(strA); SVTH: Phạm Quang Đạo – Nguyễn Hoàng Nam 45