Reputation: 539
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
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