rakoonise
rakoonise

Reputation: 539

Alarm doesn't work

I am trying to make an alarm go off right when I click the button (who has an onClick attribute set to startAlarm()). This button works fine. The toast in my startAlarm() method shows up but nothing else, not my toasts or logs in the other two files (AlarmReceiver and AlarmActivity). Any help would be greatly appreciated.

Here is my AlarmActivity

import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

public class AlarmActivity extends Activity {
    private MediaPlayer mp;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Toast.makeText(getApplicationContext(), "Its done!", Toast.LENGTH_SHORT).show();
        super.onCreate(savedInstanceState);
        Log.d("alarm","activity");
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_alarm);

        Button stopAlarm = (Button) findViewById(R.id.stop_alarm_button);
        stopAlarm.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View arg0, MotionEvent arg1) {
            mp.stop();
            finish();
            return false;
        }
    });

    playSound(this, getAlarmUri());
}

private Uri getAlarmUri() {
    Uri alert = RingtoneManager
            .getDefaultUri(RingtoneManager.TYPE_ALARM);
    if (alert == null) {
        alert = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        if (alert == null) {
            alert = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        }
    }
    return alert;
}

private void playSound(Context context, Uri alert) {
    mp = new MediaPlayer();
    try {
        mp.setDataSource(context, alert);
        final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
            mp.setAudioStreamType(AudioManager.STREAM_ALARM);
            mp.prepare();
            mp.start();
        }
    } catch (IOException e) {
        System.out.println("OOPS");
    }
}
}

This is the method in my MainActivity

public void startAlarm(View v) {
    Intent myIntent = new Intent(getApplicationContext(), AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, myIntent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 1);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    Toast.makeText(MainActivity.this, "Start Alarm", Toast.LENGTH_LONG).show();
}

This is my AlarmReceiver

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

public class AlarmReceiver extends BroadcastReceiver { 
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Intent newIntent = new Intent(context, AlarmActivity.class);
        Log.d("alarm", "receive");
        newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(newIntent);
        Toast.makeText(context, "received", Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
    }   
}

Upvotes: 0

Views: 135

Answers (1)

Ravi Bhatt
Ravi Bhatt

Reputation: 1948

I think the issue with your code is that you are using BroadcastReciever for getting the alram event but you are trying to receive it by service.

you should use PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent, 0); instead of PendingIntent.getService(getApplicationContext(), 0, myIntent, 0);

Upvotes: 1

Related Questions