iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
Mobile Development

Android Studio 學習交流系列 第 28

[Day28]Android學習-創新挑戰-健康管理app(6)

  • 分享至 

  • xImage
  •  

大家好!這篇要介紹有關於如何設計訂定時間的方式,也就是所謂的定時設計。那麼要實現定時狀態是否要讓App保持在畫面最前端,因為很多時候App處於關閉狀態時,App資源就已經被釋放,App就沒辦法與使用者作互動,由於這個緣故我們就要來一起學習,如何在App關閉時,仍然可以提醒使用者或是在使用者操作其他App時可以發送通知提醒使用者。

本篇重點

  1. 定時頁面的設計
  2. AlarmManage介紹

應具備能力

  1. Android學習-元件介紹-Layout
  2. AlarmManager官方文件

製作專案

將製作timealarm.xml版面配置檔案以供使用者設定提醒時間

timealarm.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".TimeAlarmActivity">

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/edtDay"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:hint="請輸入日期" />
    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/edtHour"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:hint="請輸入小時" />
    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/edtMin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:hint="請輸入分鐘" />
    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:id="@+id/btnNotify"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="設定"
        android:onClick="btnNotify"/>
</LinearLayout>
  • TextInputEditText搭配TextInputLayout提供更好的使用者體驗

  • tools:context=".TimeAlarmActivity" 不要將context誤設為MainActivity喔 ,不然android:onClick="btnNotify"可能會找不到應該偵聽的觸發事件


AlarmManager

AlarmManager官方文件指出AlarmManager是一個類別可以提供alarm的背景服務。

This class provides access to the system alarm services.

只要alarm廣播接收執行,那麼Alarm Manager就可以持有CPU的wake lock。

The Alarm Manager holds a CPU wake lock as long as the alarm receiver's onReceive() method is executing.

不論你的應用程式是否執行,AlarmManager提供一個你所設定的時間,執行程式服務。

The Alarm Manager is intended for cases where you want to have your application code run at a specific time, even if your application is not currently running.

總而言之,AlarmManager可以在特定時間執行開發者所設計的程式流程,由於onReceive()在後台等待接收指令,所以不論應用程式是否啟動,都能夠執行app內的程式。

成果

https://ithelp.ithome.com.tw/upload/images/20191013/2012114928li71U1XS.png
https://ithelp.ithome.com.tw/upload/images/20191013/20121149RkzQkJCqCB.jpg
這篇先為大家介紹AlarmManager,下篇再分享AlarmManager實作方式

/images/emoticon/emoticon37.gif

若文章有誤,歡迎大家提出建議。

Thank you for your time.


上一篇
[Day27]Android學習-創新挑戰-健康管理app(5)
下一篇
[Day29]Android學習-創新挑戰-健康管理app(7)
系列文
Android Studio 學習交流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言