首頁 > 軟體

Android實現簡易的鬧鐘功能

2022-09-12 18:01:54

本文範例為大家分享了Android實現簡易的鬧鐘功能的具體程式碼,供大家參考,具體內容如下

主要是通過廣播,實現一個鬧鐘的簡易功能。

實現效果如下:

主介面為一個簡易的設定鬧鐘Button,點選“設定鬧鐘”彈出時間設定窗。設定成功後,會自動彈出彈窗,提示“時間到了”。

開啟Android Studio,選擇File>New>New Project,選擇Phone and Tablet裝置下的Empty Activity,建立專案名稱為“DrinkRemind”,並點選“Finish”,完成專案建立。

首先開啟資原始檔夾“res>layout>activity_main.xml”佈局檔案,建立主介面。這裡我們需要一個設定鬧鐘的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="設定鬧鐘"/>
</LinearLayout>

在MainActivity.java中,通過鬧鐘管理器 AlarmManager 來設定鬧鐘,通過TimePickerDialog 彈出鬧鐘設定視窗。修改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){        
        //獲取當前系統時間        
        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();    //獲取日期物件           
                c.set(Calendar.HOUR_OF_DAY, hourOfDay); //設定鬧鐘小時數              
                c.set(Calendar.MINUTE, minute); //設定鬧鐘分鐘數                
                Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);                
                //建立pendingIntent                
                PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0X102, intent,0);                
                //設定鬧鐘                
                alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
                Toast.makeText(MainActivity.this, "鬧鐘設定成功", Toast.LENGTH_SHORT).show();            
            }        
        },hour,minute,true);        
        timePickerDialog.show();    
    }
}

當鬧鐘到達設定時間後,需要顯示鬧鐘的提醒框,這裡新建AlarmActivity.java類,設定鬧鐘的提醒框,程式碼如下:

public class AlarmActivity extends Activity {    
    @Override    
    public void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);        

    //顯示鬧鐘提醒框        
    new AlertDialog.Builder(AlarmActivity.this)                
        .setTitle("鬧鐘")                
        .setMessage("時間到了")                
        .setPositiveButton("確定", new DialogInterface.OnClickListener(){                    
            public void onClick(DialogInterface dialogInterface, int which) {
                AlarmActivity.this.finish();                    
            }                
        }).create().show();   
    }
}

建立一個廣播接收類AlarmReceiver,繼承BroadcastRecevice並實現OnReceive方法即可。當廣播傳送後,系統會去檢查廣播接收器的過濾器與廣播所傳送的Intent是否一致, 如果一致則呼叫OnReceive方法。一旦接收到廣播,則會立即在OnReceive方法裡呼叫AlarmActivity,顯示“時間到了”的彈窗。由於使用到了廣播機制,所以就算不開著AlarmActivity,也可以在後臺監控這個廣播。AlarmReceiver實現程式碼如下:

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);    
    }
}

廣播類AlarmReceiver和提醒框類AlarmActivity需要在Manifest.xml中進行設定,開啟AndroidMainfest.xml,在< application> 標籤下增加設定。

進行設定,開啟AndroidMainfest.xml,在<application>標籤下增加設定。

<?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>

基於以上程式碼,我們就實現了一個簡單的Android端的鬧鐘提醒App,執行後,點選主介面的“設定鬧鐘”按鍵,效果如圖所示。

完成鬧鐘設定,等待至到達鬧鐘設定時間後,介面會自動彈出“時間到了”的提醒框,如圖所示。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com