Simple Alarm with perticular user message




activity_main.xml
---------------------------

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:clickable="false"
    tools:context="com.example.anshu.alarm.MainActivity">

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

    <Button
        android:id="@+id/start_alarm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="startTimer"
        android:layout_below="@+id/alarmTimePicker"
        android:clickable="true"
        android:text="Turn on" />

    <Button
    android:id="@+id/stop_alarm"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:onClick="cancelTimer"
    android:layout_below="@+id/alarmTimePicker"
    android:clickable="true"
    android:text="Turn off" />

    <TextView
        android:id="@+id/alarmText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/start_alarm"
        android:layout_centerHorizontal="true"
        android:text="show" />

    <EditText
        android:id="@+id/edittxt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/alarmText"
        android:layout_toEndOf="@+id/start_alarm"
        android:layout_toRightOf="@+id/start_alarm"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name" />



</RelativeLayout>




























MainActivity.java



package com.example.anshu.alarm;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;

import java.util.Calendar;
import java.util.Random;

public class MainActivity extends AppCompatActivity {



  //public String str ;
    public static String str;
    AlarmManager alarmManager;
    private PendingIntent pending_intent;

    private TimePicker alarmTimePicker;
    private TextView alarmTextView;
    EditText string;
    private AlarmReceiver alarm;
    Context context;



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

        this.context = this;

        alarmTextView = (TextView) findViewById(R.id.alarmText);
        final Intent myIntent = new Intent(this.context, AlarmReceiver.class);


        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);



        final Calendar calendar = Calendar.getInstance();

        alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker);
        string = findViewById(R.id.edittxt);
         str = string.getText().toString();


        Button start_alarm= (Button) findViewById(R.id.start_alarm);
        start_alarm.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                calendar.add(Calendar.SECOND, 3);

                final int hour = alarmTimePicker.getCurrentHour();
                final int minute = alarmTimePicker.getCurrentMinute();


                Log.e("MyActivity", "In the receiver with " + hour + " and " + minute);
                setAlarmText("You clicked a " + hour + " and " + minute);


                calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
                calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());

                myIntent.putExtra("extra", "yes");
                myIntent.putExtra("msg",string.getText().toString());


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

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


                setAlarmText("Alarm set to " + hour + ":" + minute);



            }
        });

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

        stop_alarm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                int min = 1;
                int max = 9;

                Random r = new Random();
                int random_number = r.nextInt(max - min + 1) + min;
                Log.e("random number is ", String.valueOf(random_number));

                myIntent.putExtra("extra", "no");
                sendBroadcast(myIntent);

                alarmManager.cancel(pending_intent);
                setAlarmText("Alarm canceled");
            }
        });
    }

    public void setAlarmText(String alarmText) {
        alarmTextView.setText(alarmText);
    }
}












---------------------------------------------------------------------------------------------------------------


AlarmReceiver.java


package com.example.anshu.alarm;

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

/**
 * Created by Anshu on 12/12/2017.
 */

class AlarmReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {

        String state = intent.getExtras().getString("extra");
        String msg = intent.getExtras().getString("msg");
        Log.e("MyActivity", "In the receiver with " + state);

        Intent serviceIntent = new Intent(context,RingtonePlayingService.class);
        serviceIntent.putExtra("extra", state);
        serviceIntent.putExtra("msg",msg);


        context.startService(serviceIntent);

    }
}









---------------------------------------------------------------------------------------------------------------------

RingtonePlayingService.java


package com.example.anshu.alarm;

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

import java.util.Random;

/**
 * Created by Anshu on 12/12/2017.
 */

class RingtonePlayingService extends Service {

    private boolean isRunning;
    private Context context;
    MediaPlayer mMediaPlayer;
    private int startId;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.e("MyActivity", "In the Richard service");
        return null;
    }

   @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    public int onStartCommand(Intent intent, int flags, int startId) {
       final NotificationManager mNM = (NotificationManager)
               getSystemService(NOTIFICATION_SERVICE);

       Intent intent1 = new Intent(this.getApplicationContext(), MainActivity.class);
       PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0);

       String msg = intent.getExtras().getString("msg");

       Notification mNotify = new Notification.Builder(this)
               //.setContentTitle("This is demo" + "!")

               .setContentText(msg)
               .setSmallIcon(R.drawable.ic_launcher_background)
               .setContentIntent(pIntent)
               .setAutoCancel(true)
               .build();

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

       Log.e("what is going on here  ", state);


       assert state != null;
       switch (state) {
           case "no":
               startId = 0;
               break;
           case "yes":
               startId = 1;
               break;
           default:
               startId = 0;
               break;
       }

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

           Log.e("if there was not sound ", " and you want start");

           int min = 1;
           int max = 9;

           Random r = new Random();
           int random_number = r.nextInt(max - min + 1) + min;
           Log.e("random number is ", String.valueOf(random_number));

           if (random_number == 1) {
               mMediaPlayer = MediaPlayer.create(this, R.raw.ring);
           } else if (random_number == 2) {
               mMediaPlayer = MediaPlayer.create(this, R.raw.aaa);
           } else if (random_number == 3) {
               mMediaPlayer = MediaPlayer.create(this, R.raw.song);


           } else {
               mMediaPlayer = MediaPlayer.create(this, R.raw.ring);
           }

           mMediaPlayer.start();


           mNM.notify(0, mNotify);

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

       } else if (!this.isRunning && startId == 0) {
           Log.e("if there was not sound ", " and you want end");

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

       } else if (this.isRunning && startId == 1) {
           Log.e("if there is sound ", " and you want start");

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

       } else {
           Log.e("if there is sound ", " and you want end");

           mMediaPlayer.stop();
           mMediaPlayer.reset();

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


       Log.e("MyActivity", "In the service");

       return START_NOT_STICKY;
   }

 public void onDestroy() {
     Log.e("JSLog", "on destroy called");
     super.onDestroy();

     this.isRunning = false;
 }
}



0 comments: