Last exercise how to “implement and read DatePicker and TimePicker“. This post set alarm on the set date/time.

Set alarm on specified date/time with DatePicker/TimePicker

Create AlarmReceiver.java, its onReceive() method will be called once set time reached.

package com.example.androiddatepicker;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AlarmReceiver extends BroadcastReceiver {

 @Override
 public void onReceive(Context arg0, Intent arg1) {
  Toast.makeText(arg0, "Alarm received!", Toast.LENGTH_LONG).show();

 }

}

MainActivity.java

package com.example.androiddatepicker;

import java.util.Calendar;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class MainActivity extends Activity{

 DatePicker pickerDate;
 TimePicker pickerTime;
 Button buttonSetAlarm;
 TextView info;

 final static int RQS_1 = 1;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  info = (TextView)findViewById(R.id.info);
  pickerDate = (DatePicker)findViewById(R.id.pickerdate);
  pickerTime = (TimePicker)findViewById(R.id.pickertime);

  Calendar now = Calendar.getInstance();

  pickerDate.init(
    now.get(Calendar.YEAR), 
    now.get(Calendar.MONTH), 
    now.get(Calendar.DAY_OF_MONTH), 
    null);

  pickerTime.setCurrentHour(now.get(Calendar.HOUR_OF_DAY));
  pickerTime.setCurrentMinute(now.get(Calendar.MINUTE));

  buttonSetAlarm = (Button)findViewById(R.id.setalarm);
  buttonSetAlarm.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View arg0) {
    Calendar current = Calendar.getInstance();

    Calendar cal = Calendar.getInstance();
    cal.set(pickerDate.getYear(), 
      pickerDate.getMonth(), 
      pickerDate.getDayOfMonth(), 
      pickerTime.getCurrentHour(), 
      pickerTime.getCurrentMinute(), 
      00);

    if(cal.compareTo(current) <= 0){
     //The set Date/Time already passed
        Toast.makeText(getApplicationContext(), 
          "Invalid Date/Time", 
          Toast.LENGTH_LONG).show();
    }else{
     setAlarm(cal);
    }

   }});
 }

 private void setAlarm(Calendar targetCal){

  info.setText("\n\n***\n"
    + "Alarm is set@ " + targetCal.getTime() + "\n"
    + "***\n");

  Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
  PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
  AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
  alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);   
 }

}

Layout, /res/layout/activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="http://android-er.blogspot.com/"
        android:textStyle="bold"
        android:layout_gravity="center_horizontal"
        android:autoLink="web" />

    <ScrollView 
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <DatePicker 
                android:id="@+id/pickerdate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TimePicker 
                android:id="@+id/pickertime"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <Button
                android:id="@+id/setalarm"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Set Alarm"/>
            <TextView 
                android:id="@+id/info"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

        </LinearLayout>
    </ScrollView>

</LinearLayout>

Modify AndroidManifest.xml to <receiver> of “.AlarmReceiver”.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androiddatepicker"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.androiddatepicker.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".AlarmReceiver" android:process=":remote" />
    </application>

</manifest>

download filesDownload the files.

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s