snoozebtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = new Intent(getApplicationContext(), AlarmAlertBroadcastReciever.class);
myIntent.putExtra("alarm", this);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent,PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, getAlarmTime().getTimeInMillis(), pendingIntent);
Toast.makeText(getApplicationContext(), "Snoozed for 10 mins", Toast.LENGTH_LONG);
finish();
}
});
当我点击贪睡按钮时,闹钟必须在10分钟后重新开始,但这不起作用。
我在10秒后设置闹钟,这是当我点击暂停按钮时10秒后的logcat
完整的LOGCAT
在这里输入代码
public class AlarmAlertActivity extends Activity implements OnClickListener {
private Calendar alarmTime = Calendar.getInstance();
private Alarm alarm;
private MediaPlayer mediaPlayer;
private StringBuilder answerBuilder = new StringBuilder();
private Vibrator vibrator;
private boolean alarmActive;
private TextView problemView;
private TextView answerView;
private TextView msg_txt, alarmname_txt;
private ImageView img1;
Spinner spinner_snooze;
private String answerString;
int hr1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
setContentView(R.layout.simple);
Bundle bundle = this.getIntent().getExtras();
alarm = (Alarm) bundle.getSerializable("alarm");
Button can1 = (Button) findViewById(R.id.can1);
Button snoozebtn = (Button) findViewById(R.id.snoozebtn);
Animation shake = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.shake);
Animation shakeimage = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.shakeimage);
msg_txt = (TextView) findViewById(R.id.msg_txt);
alarmname_txt = (TextView) findViewById(R.id.alarmname_txt);
img1 = (ImageView) findViewById(R.id.img1);
img1.setImageResource(R.drawable.smileyblack);
Calendar c = Calendar.getInstance(); // Get current time
hr1 = c.get(Calendar.HOUR_OF_DAY); // Gets the current hour of the day ( from 1 to 24 )
startAlarm();
if (hr1 < 12) {
findViewById(R.id.img1).startAnimation(shakeimage);
msg_txt.setText("Good morning!");
alarmname_txt.setText(alarm.getAlarmName());
} else if(hr1 > 12 && hr1 < 17) {
findViewById(R.id.msg_txt).startAnimation(shake);
findViewById(R.id.img1).startAnimation(shakeimage);
msg_txt.setText("Good afternoon!");
alarmname_txt.setText(alarm.getAlarmName());
} else if(hr1 > 17 && hr1 < 20) {
findViewById(R.id.img1).startAnimation(shakeimage);
msg_txt.setText("Good evening!");
alarmname_txt.setText(alarm.getAlarmName());
} else {
findViewById(R.id.msg_txt).startAnimation(shake);
msg_txt.setText("Good night!");
alarmname_txt.setText(alarm.getAlarmName());
}
can1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
snoozebtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Calendar c1 = Calendar.getInstance(); // Get current time
long getTimeaftertenminute = c1.getTimeInMillis() + 5000;
Intent myIntent = new Intent(getApplicationContext(), AlarmAlertBroadcastReciever.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, myIntent,PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, getTimeaftertenminute,pendingIntent );
Toast.makeText(getApplicationContext(), "Snoozed for 30 sec ", Toast.LENGTH_LONG);
finish();
}
});
}
@Override
protected void onResume() {
super.onResume();
alarmActive = true;
}
private void startAlarm() {
if (alarm.getAlarmTonePath() != "") {
mediaPlayer = new MediaPlayer();
if (alarm.getVibrate()) {
vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
long[] pattern = { 1000, 200, 200, 200 };
vibrator.vibrate(pattern, 0);
}
try {
mediaPlayer.setVolume(1.0f, 1.0f);
mediaPlayer.setDataSource(this,
Uri.parse(alarm.getAlarmTonePath()));
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
mediaPlayer.release();
alarmActive = false;
}
}
}
@Override
public void onBackPressed() {
if (!alarmActive)
super.onBackPressed();
}
@Override
protected void onDestroy() {
try {
if (vibrator != null)
vibrator.cancel();
} catch (Exception e) {
}
try {
mediaPlayer.stop();
} catch (Exception e) {
}
try {
mediaPlayer.release();
} catch (Exception e) {
}
super.onDestroy();
}
} }
这是警报活动
答案 0 :(得分:0)
只需将闹钟设置为与您不需要取消之前的闹钟相同的ID,就可以非常轻松地暂停闹钟。
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), sameid, myIntent,PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, getTimeaftertenminute,pendingIntent );
请编辑示例代码中的sameid变量,其编号与设置闹钟时给出的编号相同。这将取消闹钟并设置新闹钟。
正如你的logcat所建议的那样,你想要访问的某个对象在AlarmAlertActivity的onCreate方法中是null。
请粘贴AlarmAlertActivity onCreate方法。
希望它会有所帮助:)。