安卓小項目之自定義鬧鐘

近期我正在做一個安卓鬧鐘的項目,在這個項目中我真可謂是歷盡千辛萬苦啊,平均每天研究這個程序真的可以研究10個小時左右啊,真的是讓我頭疼死了。直至現在,我已經可以用好多種方法來實現這個鬧鐘了,然後如果大家有什麼不會的可以給我留言,我會非常有耐心的爲大家解答,我現在就用一種我自認爲最簡單的方法爲大家介紹一下。


我們首先是要想,一個鬧鐘的功能,當然要有設置時間的功能,然後到時間要有提醒的功能,提醒可以分爲很多種,可以使用notification、diallog、響鈴等很多種方式來提醒大家,當然我們也可以使用集中混合在一起提醒大家。


下面我會一個部分,一個部分的介紹我們的程序。


第一部分:首先我們要想到的就是我們的程序,要有一個數據存儲的功能,這裏我們可以用到sharedpreferences,因爲它是一個輕量級的數據存儲我們需要用到的,在我們的程序裏面我們需要把我們設置的時間存儲起來,因爲如果我們不慎把我們的程序關掉之後打開之後要保存上次設置的時間。

SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);
time1String = settings.getString("TIME1", defalutString);
time2String = settings.getString("TIME2", defalutString);
time3String = settings.getString("TIME3", defalutString);

//在接下來我們還需要
SharedPreferences time1Share = getPreferences(0);
SharedPreferences.Editor editor = time1Share.edit();
editor.putString("TIME1", tmpS);
editor.commit();

(在這裏面我們首先創建了一個SharerPreferences的對象settings,在這裏滿我們傳入的參數是MODE_PRIVATE,它的含義是覆蓋寫的意思,然後我們又創建了三個字符串分別都讓它們爲空,然後在代碼中我們爲三個字符串都賦了初值defalutString,然後當我們的數據寫完了之後呢,我們需要在SharedPreference裏面開一個空間用來儲存我們的數據,這樣我們便可以通過鍵值對的方式來儲存我們的數據了,在最後我們用到了一個提交事務的方法)




第二部分:我們要在設置的按鈕中添加點擊事件,在點擊事件中,我們需要涉及到很多的事情,我們首先需要一個calendar.getInstance()的對象,因爲有了這個對象我們在獲取系統時間的時候是非常簡單的,然後我們通過c.setTimeInMillis(System.currentTimeMillis())的方法來實現我們想獲取時間的想法,然後我們通過int mHour=c.get(Calendar.HOUR_OF_DAY)來得到我們的小時,得到分鐘的方法和這個方法類似。

Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
int mHour = c.get(Calendar.HOUR_OF_DAY);
int mMinute = c.get(Calendar.MINUTE);

(在以上的代碼,我們便獲取到了系統現在的時間了)


接下來我們要設置一個需要鬧鐘提醒的時間,這樣的話我們就需要new 一個TimePickerDialog用來接收我們設置的時間,然後調用onTimeSet的方法來設置我們想要設置的時間。

new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        c.setTimeInMillis(System.currentTimeMillis());
        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
        c.set(Calendar.MINUTE, minute);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);}

(這樣我們便已經設置好了,我們想要設置的時間)


然後到了我們鬧鐘最重要的一個步驟,就是用pendingIntent實現跳轉,pendingInetnt和Intent最大的不同便是可以實現延遲跳轉的功能。接下來我們還要用到一個全局計時器AlarmManager的東西,在這裏面我們可以通過am.set()的方法來設置我們的鬧鐘的提醒的方式,這裏有很多種提醒方式,我們用到的是RTC_WAKEUP的方法,這種方法可以做到我們的手機在什麼狀態下都會進行提醒,這裏還有很多種方式大家都可以百度到的,am.set()的方法也有很多種構造函數,這裏我們會講到兩種,一種是到時間直接就提示我們的,還有一種是到時間之後提醒我們,並且可以爲之設置一個週期的方法。

Intent intent = new Intent(MainActivity.this, CallAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
AlarmManager am;
am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), sender);



在整個的實現過程中,我們還需要用到一個小的方法,也就是時間的轉換,因爲如果我們的小時或者分鐘出現了個位數那麼我們需要將他們轉換成0+那位數字的形式,這樣我們的用戶體驗纔可以達到最好,並且我們也只需要寫一個小的方法就行。

private String format(int x) {
    String s = "" + x;
    if (s.length() == 1) s = "0" + s;
    return s;
}

有了這樣的一個方法呢,我們在有一個個位數傳進我們的函數之後,便可以很輕鬆的變成一個0+上個位數字的形式了,這也很大程度上的提高了我們的用戶體驗。

String tmpS = format(hourOfDay) + ":" + format(minute);
setTime1.setText(tmpS);




第三部分:我們要在這個部分中加入我們刪除鬧鐘的按鈕了,因爲我們設定了一個鬧鐘如果我們不喜歡的話,我們一定是要刪除我們這個鬧鐘的,同理,在這裏我們爲button添加點擊事件,然後利用Intent和PendingIntent發送廣播告訴接受廣播的下一個界面,我們要把定時的功能取消掉了,只需要加入一個函數即可,這樣我們的小鬧鐘就基本上做完了。


總結一下吧,想實現這樣一個鬧鐘,我們是通過一個全局的計時器來實現的,思路很清晰簡單,想要實現鈴聲,提醒只需要往上加服務或者notifaction就行。
































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章