11/08/2018, 22:55

Ứng dụng AlarmClock với Android

Ứng dụng AlarmClock với Android (phần 1) Mục tiêu đạt được 1 ứng dụng hoàn chỉnh trên android, với tác dụng đánh thức người dùng bằng âm thanh, hình ảnh với thời gian định sẵn. Resource trên github: https://github.com/MuiNV54/AlarmClock Tổng quan về ứng dụng đồng hồ báo thức Ứng dụng đồng hồ ...

Ứng dụng AlarmClock với Android (phần 1)

Mục tiêu đạt được 1 ứng dụng hoàn chỉnh trên android, với tác dụng đánh thức người dùng bằng âm thanh, hình ảnh với thời gian định sẵn.

Resource trên github: https://github.com/MuiNV54/AlarmClock

Tổng quan về ứng dụng đồng hồ báo thức Ứng dụng đồng hồ báo thức khá phổ biến trên cả android và IOS. Chúng ta cần tạo nhiều item, với mỗi item thể hiện 1 giá trị thời gian. Khi đến thời gian này, ứng dụng sẽ bắn ra 1 tín hiệu âm thanh, hình ảnh để đánh thức người dùng. Và ứng dụng sẽ tự động bật khi điện thoại bật.

Thời gian của các item có thể được lặp đi lặp lại theo ngày đã chọn.

Qui trình làm ứng dụng Giả sử bạn đã có 1 chút kiến thức cơ bản về android.

3.1Kiến thức cần biết

  •   kiến thức cơ bản về android
    
  •   listview
    
  •   adapter
    
  •   database
    
  •   Calender
    
  •   Service
    

3.2Activies và actionbar

Trước hết, chúng ta tạo 1 icon menu trên actionbar, để khi click vào sẽ chuyển sang màn hình cài đặt thời gian. Rất đơn giản, tạo 1 file xml trong thư mục menu, với tên alarm_list.xml.

Screen-Shot-2014-11-20-at-9.37.37-AM-300x74.png

add menu vừa tạo vào MainActivity:

Screen-Shot-2014-11-20-at-9.40.18-AM-300x46.png

Hàm này sẽ tự gọi khi người dùng click vào 1 item menu trên activity (trong trường hợp này là item add vừa tạo ).

Chúng ta cần tạo mới 1 activity tên: AlarmDetailsActivity, sẽ là màn hình cài đặt chi tiết của các item (thời gian, ngày lặp ...). Và khi bấm vào item add, ứng dụng sẽ chuyển sang activity mới này.

Screen-Shot-2014-11-20-at-9.42.10-AM-300x122.png

Screen-Shot-2014-11-20-at-9.42.51-AM-300x54.png

Hàm startActivuty sẽ thực hiện việc chuyển sang activity đã được khai báo ở new Intent.

Khi ở màn hình detail, chúng ta muốn có 1 button để khi click vào sẽ trở lại màn hình chính. Android cung cấp 1 button mặc định, và chúng ta gọi ra đơn giản với 2 lệnh của getactionbar.

Screen-Shot-2014-11-20-at-9.45.53-AM-300x63.png

Bây giờ hãy chạy thử trên simulator, bạn có thể tự do chuyển đổi giữa 2 màn hình vừa tạo.

3.3View Layout chi tiết

Trước hết tạo 1 model của đối tượng alarm, là 1 class chứa dữ liệu cần có của alarm.

Screen-Shot-2014-11-20-at-9.46.16-AM-300x77.png

Bây giờ chúng ta cần tạo 1 file activity_details.xml trong thư mục res/layout. Và trong hàm onCreate, chúng ta cần gọi đến layout này trong hàm setContentView. Và tạo mới 1 model.

Screen-Shot-2014-11-20-at-9.49.14-AM-300x288.png

Layout chúng ta cần tạo để có giao diện hiển thị:

Screen-Shot-2014-11-20-at-9.50.51-AM-239x300.png

Chúng ta sẽ có layout với id alarm_ring_tone_container, mà khi bấm vào đó, sẽ hiện ra màn hình để chọn sound cho alarm.

Hàm setOnClickListener sẽ được gọi khi người dùng click vào đối tượng được gọi. Và cụ thể ở đây sẽ hiện ta 1 màn hình mặc định của android, cho phép chúng ta chọn sound cho alarm với action ACTION_RINGTONE_PICKER.

Screen-Shot-2014-11-20-at-9.51.53-AM-300x69.png

Sau khi chọn được sound ưng ý, bấm vào button OK, chúng ta sẽ trở về giao diện chính, sẽ tự động gọi vào hàm onActivityResult của activity hiện tại. Và chúng ta cần nhận lại sound đã chọn.

Screen-Shot-2014-11-20-at-9.52.12-AM-300x93.png

Và chúng ta cần 1 button save ở màn hình chính để lưu lại alarm đã tạo. Khí bấm vào button này, sẽ trở lại màn hình chính của app, và tạo cho chúng ta 1 alarm. Chúng ta sẽ dùng menu item của android.

Screen-Shot-2014-11-20-at-9.52.56-AM-300x87.png

3.4Lưu dữ liệu với Sqlite

Chúng ta sẽ đại diện bảng cần tạo bằng 1 abstract class, cung cấp các ID column cần thiết.

Screen-Shot-2014-11-20-at-10.12.14-AM-170x300.png

Tiếp theo, cần tạo 1 class AlarmDBHelper extends từ lớp SQLiteOpenHelper, sẽ giúp chúng ta quản lý việc tạo và update database. Trước hết chúng ta cần xác định version, tên, và đoạn string create, delete table. Và nếu muốn mở rộng table sau đó, cần khai báo trong hàm onUpgrade.

Screen-Shot-2014-11-20-at-10.22.42-AM-300x82.png

Chúng ta cần 1 phương thức để map model vào các đối tượng trong bảng dữ liệu, có thể sử dụng lại trong quá trình làm việc sau này.

Screen-Shot-2014-11-20-at-10.23.39-AM-300x215.png

Tiếp theo là phương thức đọc và tạo:

Screen-Shot-2014-11-20-at-10.24.15-AM-300x122.png

Cuối cùng là update và delete.

Screen-Shot-2014-11-20-at-10.24.31-AM-300x55.png

Để có list alarms đã lưu trong database, chúng ta cần phương thức getall:

Screen-Shot-2014-11-20-at-10.24.41-AM-300x186.png

Trong details activity, chúng ta cần kết nối model với database helper: tạo phương thưc tạo vào update database trong save action. Khi tạo cần đảm bảo ID là -1, và các trương hợp khác là dành cho update.

Screen-Shot-2014-11-20-at-10.25.15-AM-300x300.png

0