Android實(shí)現(xiàn)簡(jiǎn)易的鬧鐘功能
本文實(shí)例為大家分享了Android實(shí)現(xiàn)簡(jiǎn)易的鬧鐘功能的具體代碼,供大家參考,具體內(nèi)容如下
主要是通過(guò)廣播,實(shí)現(xiàn)一個(gè)鬧鐘的簡(jiǎn)易功能。
實(shí)現(xiàn)效果如下:
主界面為一個(gè)簡(jiǎn)易的設(shè)置鬧鐘Button,點(diǎn)擊“設(shè)置鬧鐘”彈出時(shí)間設(shè)置窗。設(shè)置成功后,會(huì)自動(dòng)彈出彈窗,提示“時(shí)間到了”。

打開(kāi)Android Studio,選擇File>New>New Project,選擇Phone and Tablet設(shè)備下的Empty Activity,創(chuàng)建項(xiàng)目名稱(chēng)為“DrinkRemind”,并點(diǎn)擊“Finish”,完成項(xiàng)目創(chuàng)建。
首先打開(kāi)資源文件夾“res>layout>activity_main.xml”布局文件,創(chuàng)建主界面。這里我們需要一個(gè)設(shè)置鬧鐘的button,修改activity_main.xml代碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ?? ?android:orientation="vertical" ? ? ?? ?android:layout_width="fill_parent" ? ? ?? ?android:layout_height="fill_parent" ? ? ?? ?xmlns:app="http://schemas.android.com/apk/res-auto" ? ? ?? ?xmlns:tools="http://schemas.android.com/tools" ? ? ?? ?tools:context=".MainActivity"> ? ?? ? ? ?? ?<Button ? ? ? ? ?? ??? ?android:id="@+id/set_clock" ? ? ? ? ?? ??? ?android:layout_width="fill_parent" ? ? ? ? ?? ??? ?android:layout_height="wrap_content" ? ? ? ? ?? ??? ?android:text="設(shè)置鬧鐘"/> </LinearLayout>
在MainActivity.java中,通過(guò)鬧鐘管理器 AlarmManager 來(lái)設(shè)定鬧鐘,通過(guò)TimePickerDialog 彈出鬧鐘設(shè)置窗口。修改MainActivity.java中的代碼如下:
public class MainActivity extends Activity { ? ?
?? ?private Button btn; ? ?
?? ?private AlarmManager alarmManager; ?//鬧鐘管理器 ? ?
?? ?
?? ?@Override ? ?
?? ?protected void onCreate(Bundle savedInstanceState) { ? ? ? ?
?? ??? ?super.onCreate(savedInstanceState); ? ? ? ?
?? ??? ?setContentView(R.layout.activity_main); ? ? ? ?
?? ??? ?//獲取鬧鐘管理器 ? ? ? ?
?? ??? ?alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); ? ? ? ?
?? ??? ?btn = (Button)findViewById(R.id.set_clock); ? ? ? ?
?? ??? ?btn.setOnClickListener(new View.OnClickListener() { ? ? ? ? ? ?
?? ??? ??? ?@Override ? ? ? ? ? ?
?? ??? ??? ?public void onClick(View view) { ? ? ? ? ? ? ? ?
?? ??? ??? ??? ?setClock(view); ? ? ? ? ? ?
?? ??? ??? ?} ? ? ? ?
?? ??? ?}); ??
?? ?} ? ?
?? ?public void setClock(View view){ ? ? ? ?
?? ??? ?//獲取當(dāng)前系統(tǒng)時(shí)間 ? ? ? ?
?? ??? ?Calendar calendar = Calendar.getInstance(); ? ? ? ?
?? ??? ?int hour = calendar.get(Calendar.HOUR_OF_DAY); ? ? ? ?
?? ??? ?int minute = calendar.get(Calendar.MINUTE); ? ? ? ?
?? ??? ?//彈出鬧鐘框 ? ? ? ?
?? ??? ?TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { ? ? ? ? ? ?
?? ??? ??? ?@Override ? ? ? ? ? ?
?? ??? ??? ?public void onTimeSet(TimePicker view, int hourOfDay, int minute) { ? ? ? ? ? ? ? ?
?? ??? ??? ??? ?Calendar c = Calendar.getInstance(); ? ?//獲取日期對(duì)象 ? ? ? ? ??
?? ??? ??? ??? ?c.set(Calendar.HOUR_OF_DAY, hourOfDay); //設(shè)置鬧鐘小時(shí)數(shù) ? ? ? ? ? ? ?
?? ??? ??? ??? ?c.set(Calendar.MINUTE, minute); //設(shè)置鬧鐘分鐘數(shù) ? ? ? ? ? ? ? ?
?? ??? ??? ??? ?Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); ? ? ? ? ? ? ? ?
?? ??? ??? ??? ?//創(chuàng)建pendingIntent ? ? ? ? ? ? ? ?
?? ??? ??? ??? ?PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0X102, intent,0); ? ? ? ? ? ? ? ?
?? ??? ??? ??? ?//設(shè)置鬧鐘 ? ? ? ? ? ? ? ?
?? ??? ??? ??? ?alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
?? ??? ??? ??? ?Toast.makeText(MainActivity.this, "鬧鐘設(shè)置成功", Toast.LENGTH_SHORT).show(); ? ? ? ? ? ?
?? ??? ??? ?} ? ? ? ?
?? ??? ?},hour,minute,true); ? ? ? ?
?? ??? ?timePickerDialog.show(); ? ?
?? ?}
}當(dāng)鬧鐘到達(dá)設(shè)定時(shí)間后,需要顯示鬧鐘的提醒框,這里新建AlarmActivity.java類(lèi),設(shè)置鬧鐘的提醒框,代碼如下:
public class AlarmActivity extends Activity { ? ?
?? ?@Override ? ?
?? ?public void onCreate(Bundle savedInstanceState) { ? ? ? ?
?? ??? ?super.onCreate(savedInstanceState); ? ? ? ?
?? ?//顯示鬧鐘提醒框 ? ? ? ?
?? ?new AlertDialog.Builder(AlarmActivity.this) ? ? ? ? ? ? ? ?
?? ??? ?.setTitle("鬧鐘") ? ? ? ? ? ? ? ?
?? ??? ?.setMessage("時(shí)間到了") ? ? ? ? ? ? ? ?
?? ??? ?.setPositiveButton("確定", new DialogInterface.OnClickListener(){ ? ? ? ? ? ? ? ? ? ?
?? ??? ??? ?public void onClick(DialogInterface dialogInterface, int which) {
?? ??? ??? ??? ?AlarmActivity.this.finish(); ? ? ? ? ? ? ? ? ? ?
?? ??? ??? ?} ? ? ? ? ? ? ? ?
?? ??? ?}).create().show(); ??
?? ?}
}創(chuàng)建一個(gè)廣播接收類(lèi)AlarmReceiver,繼承BroadcastRecevice并實(shí)現(xiàn)OnReceive方法即可。當(dāng)廣播發(fā)送后,系統(tǒng)會(huì)去檢查廣播接收器的過(guò)濾器與廣播所發(fā)送的Intent是否一致, 如果一致則調(diào)用OnReceive方法。一旦接收到廣播,則會(huì)立即在OnReceive方法里調(diào)用AlarmActivity,顯示“時(shí)間到了”的彈窗。由于使用到了廣播機(jī)制,所以就算不開(kāi)著AlarmActivity,也可以在后臺(tái)監(jiān)控這個(gè)廣播。AlarmReceiver實(shí)現(xiàn)代碼如下:
public class AlarmReceiver extends BroadcastReceiver {?
? ?
?? ?@Override ? ?
?? ?public void onReceive(Context context, Intent intent) { ? ? ? ?
?? ??? ?Intent i = new Intent(context, AlarmActivity.class);
?? ??? ?i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ? ? ? ?
?? ??? ?context.startActivity(i); ? ?
?? ?}
}廣播類(lèi)AlarmReceiver和提醒框類(lèi)AlarmActivity需要在Manifest.xml中進(jìn)行配置,打開(kāi)AndroidMainfest.xml,在< application> 標(biāo)簽下增加配置。
進(jìn)行配置,打開(kāi)AndroidMainfest.xml,在<application>標(biāo)簽下增加配置。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ?? ?package="com.example.drinkremind"> ? ? ?? ?<application ? ? ? ? ?? ??? ?android:allowBackup="true" ? ? ? ? ?? ??? ?...... ? ? ? ? ?? ??? ?<activity android:name=".MainActivity"> ? ? ? ? ? ? ?? ??? ??? ?<intent-filter> ? ? ? ? ? ? ? ? ?? ??? ??? ??? ?<action android:name="android.intent.action.MAIN" /> ? ? ? ? ? ? ? ? ?? ??? ??? ??? ?<category android:name="android.intent.category.LAUNCHER" /> ? ? ? ? ? ? ?? ??? ??? ?</intent-filter> ? ? ? ? ?? ??? ?</activity> ? ? ? ? ?? ??? ?<activity android:name=".AlarmActivity"/> ? ? ? ? ?? ??? ?<receiver android:name=".AlarmReceiver" android:process=":remote"/> ? ? ?? ?</application> </manifest>
基于以上代碼,我們就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的Android端的鬧鐘提醒App,運(yùn)行后,點(diǎn)擊主界面的“設(shè)置鬧鐘”按鍵,效果如圖所示。

完成鬧鐘設(shè)置,等待至到達(dá)鬧鐘設(shè)置時(shí)間后,界面會(huì)自動(dòng)彈出“時(shí)間到了”的提醒框,如圖所示。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中Glide獲取圖片Path、Bitmap用法詳解
這篇文章主要介紹了Android中Glide獲取圖片Path、Bitmap用法以及代碼分析,需要的朋友們參考一下吧。2017-12-12
Android Monkey壓力測(cè)試詳細(xì)介紹
本文主要介紹Android Monkey壓力測(cè)試,這里整理了詳細(xì)的Monkey資料,有需要的小伙伴可以參考下2016-08-08
Android Easeui 3.0 即時(shí)通訊的問(wèn)題匯總
這篇文章主要介紹了Android Easeui 3.0 即時(shí)通訊的問(wèn)題匯總的相關(guān)資料,需要的朋友可以參考下2016-09-09
實(shí)現(xiàn)Android studio設(shè)置自動(dòng)導(dǎo)包及自動(dòng)導(dǎo)包快捷鍵
這篇文章主要介紹了實(shí)現(xiàn)Android studio設(shè)置自動(dòng)導(dǎo)包及自動(dòng)導(dǎo)包快捷鍵的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android緩存之DiskLruCache磁盤(pán)緩存的使用
這篇文章主要介紹了Android緩存之DiskLruCache磁盤(pán)緩存的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Android自定義控件之小說(shuō)書(shū)架實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了Android自定義控件之小說(shuō)書(shū)架示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪方法2023-04-04
Android XRecyclerView最簡(jiǎn)單的item點(diǎn)擊事件處理
這篇文章主要為大家詳細(xì)介紹了Android XRecyclerView最簡(jiǎn)單的item點(diǎn)擊事件處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
android 使用kotlin 實(shí)現(xiàn)點(diǎn)擊更換全局語(yǔ)言(中日英切換)
這篇文章主要介紹了android kotlin 點(diǎn)擊更換全局語(yǔ)言的實(shí)現(xiàn)方法,這里主要介紹中日英切換,需要的朋友可以參考下2019-11-11
詳解用RxJava實(shí)現(xiàn)事件總線(Event Bus)
本篇文章主要介紹了用RxJava實(shí)現(xiàn)事件總線(Event Bus),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
Android Service啟動(dòng)過(guò)程完整分析
這篇文章主要為大家詳細(xì)分析了Android Service啟動(dòng)完整過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10

