You are on page 1of 11

Practical:-10

Aim: Write a mobile application that create alarm clock.

Code

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout
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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="comjoshsibayan.github.alarm.MainActivity">

<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timePicker"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/alarm_state"
android:layout_marginTop="5dp"
android:textSize="18dp"
android:text="Start"
android:id="@+id/alarm_on"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/alarm_state"
android:layout_marginTop="5dp"
android:textSize="18dp"
android:text="Stop"
android:id="@+id/alarm_off"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:textSize="25dp"
android:text="Did you set the alarm?"
android:id="@+id/alarm_state"
android:layout_below="@+id/timePicker"
android:layout_centerHorizontal="true" />

<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18dp"
android:id="@+id/spinner"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>

MainActivity.java
package comjoshsibayan.github.alarm;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.icu.util.Calendar;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements


AdapterView.OnItemSelectedListener {

AlarmManager alarm_manager;
TimePicker alarm_timepicker;
TextView alarm_state;
Context context;
PendingIntent pending_intent;
int sound_select;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final AlarmManager alarm_manager = (AlarmManager)
getSystemService(ALARM_SERVICE);
final TimePicker alarm_timepicker = (TimePicker) findViewById(R.id.timePicker);
final TextView alarm_state = (TextView) findViewById(R.id.alarm_state);

final Calendar calendar = Calendar.getInstance();

final Intent my_intent = new Intent(MainActivity.this, AlarmReceiver.class);

Spinner spinner = (Spinner) findViewById(R.id.spinner);


ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource
(this, R.array.stepbrothers_array, android.R.layout.simple_spinner_item);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(this);
Button alarm_on = (Button) findViewById(R.id.alarm_on);
alarm_on.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

calendar.set(Calendar.HOUR_OF_DAY, alarm_timepicker.getHour());
calendar.set(Calendar.MINUTE, alarm_timepicker.getMinute());

int hour = alarm_timepicker.getHour();


int minute = alarm_timepicker.getMinute();

String hour_string = String.valueOf(hour);


String minute_string = String.valueOf(minute);

if(hour > 12) hour_string = String.valueOf(hour - 12);


if(minute < 10) minute_string = "0" + String.valueOf(minute);

alarm_state.setText("Alarm set to: " + hour_string + ":" + minute_string);

my_intent.putExtra("extra", "alarm on");

my_intent.putExtra("sound_choice", sound_select);

pending_intent = PendingIntent.getBroadcast
(MainActivity.this, 0, my_intent, PendingIntent.FLAG_UPDATE_CURRENT);

alarm_manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
pending_intent);

}
});

Button alarm_off = (Button) findViewById(R.id.alarm_off);


alarm_off.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alarm_state.setText("Alarm Off!");

alarm_manager.cancel(pending_intent);

my_intent.putExtra("extra", "alarm off");

my_intent.putExtra("sound_choice", sound_select);

sendBroadcast(my_intent);
}
});
}

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {

//Toast.makeText(parent.getContext(), "Spinner item is " + id,


Toast.LENGTH_SHORT).show();
sound_select = (int) id;
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
}

AlarmReciver.java
package comjoshsibayan.github.alarm;

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

public class AlarmReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {

String fetch_string = intent.getExtras().getString("extra");


int get_sound_choice = intent.getExtras().getInt("sound_choice");
Intent service_intent = new Intent(context, RingtonePlayingService.class);
service_intent.putExtra("extra", fetch_string);
service_intent.putExtra("sound_choice", get_sound_choice);

context.startService(service_intent);

}
}
RingtonePlayingService.java

package comjoshsibayan.github.alarm;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;

import java.util.Random;

/**
* Created by Josh on 8/31/2016.
*/
public class RingtonePlayingService extends Service {

MediaPlayer media_song;
int startId;
boolean isRunning;

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

String state = intent.getExtras().getString("extra");

int sound_id = intent.getExtras().getInt("sound_choice");

NotificationManager notify_manager =
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Intent intent_main_activity = new Intent(this.getApplicationContext(), MainActivity.class);

PendingIntent pending_intent_main_activity =
PendingIntent.getActivity(this, 0, intent_main_activity, 0);

Notification notify_popup =
new Notification.Builder(this).setContentTitle("An alarm is going off!")
.setContentText("Click me!")
.setContentIntent(pending_intent_main_activity)
.setAutoCancel(true).build();
assert state != null;
switch (state) {
case "alarm on":
startId = 1;
break;
case "alarm off":
startId = 0;
Log.e("Start ID is ", state);
break;
default:
startId = 0;
break;
}

if(!this.isRunning && startId == 1) {

this.isRunning = true;
this.startId = 0;

notify_manager.notify(0, notify_popup);

media_song = MediaPlayer.create(this, R.raw.kalimba);


media_song.start();

if(sound_id == 0) {

int min = 1, max = 5;


Random rand = new Random();
int sound_number = rand.nextInt(max + min);

if(sound_number == 1) {
media_song = MediaPlayer.create(this, R.raw.catalina_wine_mixer);
media_song.start();
} else if(sound_id == 2) {
media_song = MediaPlayer.create(this, R.raw.inclement_weather);
media_song.start();
} else if(sound_id == 3) {
media_song = MediaPlayer.create(this, R.raw.johnny_hopkins);
media_song.start();
} else if(sound_id == 4) {
media_song = MediaPlayer.create(this, R.raw.lightning_bolt);
media_song.start();
} else if(sound_id == 5) {
media_song = MediaPlayer.create(this, R.raw.robert_better_not_get_in_my_face);
media_song.start();
} else {
media_song = MediaPlayer.create(this, R.raw.butt_buddy);
media_song.start();
}
} else if(sound_id == 1) {
media_song = MediaPlayer.create(this, R.raw.catalina_wine_mixer);
media_song.start();
} else if(sound_id == 2) {
media_song = MediaPlayer.create(this, R.raw.inclement_weather);
media_song.start();
} else if(sound_id == 3) {
media_song = MediaPlayer.create(this, R.raw.johnny_hopkins);
media_song.start();
} else if(sound_id == 4) {
media_song = MediaPlayer.create(this, R.raw.lightning_bolt);
media_song.start();
} else if(sound_id == 5) {
media_song = MediaPlayer.create(this, R.raw.robert_better_not_get_in_my_face);
media_song.start();
} else {
media_song = MediaPlayer.create(this, R.raw.butt_buddy);
media_song.start();
}

} else if(this.isRunning && startId == 0) {

media_song.stop();
media_song.reset();

this.isRunning = false;
this.startId = 0;

} else if(!this.isRunning && startId == 0) {

this.isRunning = false;
startId = 0;

} else if(this.isRunning && startId == 1) {

this.isRunning = true;
this.startId = 1;
} else {

return START_NOT_STICKY;
}

@Override
public void onDestroy() {

// Log.e("onDestroy called", "ta da");

super.onDestroy();
this.isRunning = false;
}

Output

You might also like