Alarm Clock
Alarm Clock
Step 2: Pre-requisites:
Gradle (module)
buildFeatures{
viewBinding true
}
colors.xml
<color name="lavender">#8692f7</color>
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.AlarmClock" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/lavender</item>
<item name="colorPrimaryVariant">@color/lavender</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
Drawables
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AlarmClock"
tools:targetApi="31">
<activity
android:name=".NotificationActivity"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<receiver android:name=".AlarmReceiver"/>
</application>
</manifest>
activity_main.xml
activity_notifications.xml
AlarmReceiver.java
package com.example.alarmclock;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent nextActivity = new Intent(context, NotificationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, nextActivity, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "androidknowledge")
.setSmallIcon(R.drawable.ic_baseline_notifications_24)
.setContentTitle("Reminder")
.setContentText("It's time to wake up")
.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent);
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
notificationManagerCompat.notify(123,builder.build());
}
}
MainActivity.java
package com.example.alarmclock;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlarmManager;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.example.alarmclock.databinding.ActivityMainBinding;
import com.google.android.material.timepicker.MaterialTimePicker;
import com.google.android.material.timepicker.TimeFormat;
import java.util.Calendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding =
ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
createNotificationChannel();
binding.selectTime.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
timePicker = new MaterialTimePicker.Builder()
.setTimeFormat(TimeFormat.CLOCK_12H)
.setHour(12)
.setMinute(0)
.setTitleText("Select Alarm Time")
.build();
timePicker.show(getSupportFragmentManager(),
"androidknowledge");
timePicker.addOnPositiveButtonClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
if (timePicker.getHour() > 12){
binding.selectTime.setText(
String.format("%02d",
(timePicker.getHour()-12)) +":"+ String.format("%02d",
timePicker.getMinute())+"PM"
);
} else {
binding.selectTime.setText(timePicker.getHour()+":" +
timePicker.getMinute()+ "AM");
}
calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,
timePicker.getHour());
calendar.set(Calendar.MINUTE,
timePicker.getMinute());
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
}
});
}
});
binding.setAlarm.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this,
AlarmReceiver.class);
pendingIntent =
PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
pendingIntent);
Toast.makeText(MainActivity.this, "Alarm Set",
Toast.LENGTH_SHORT).show();
}
});
binding.cancelAlarm.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,
AlarmReceiver.class);
pendingIntent =
PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
if (alarmManager == null){
alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
}
alarmManager.cancel(pendingIntent);
Toast.makeText(MainActivity.this, "Alarm
Canceled", Toast.LENGTH_SHORT).show();
}
});
NotificationManager notificationManager =
getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
}
https://www.youtube.com/watch?v=750gsBtAsoI