打盹不适用于报警管理器

时间:2015-04-23 06:28:06

标签: android android-intent android-broadcast android-alarms

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分钟后重新开始,但这不起作用。

enter image description here

我在10秒后设置闹钟,这是当我点击暂停按钮时10秒后的logcat

完整的LOGCAT

在这里输入代码

enter image description here

enter image description here

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();
}

} }

这是警报活动

1 个答案:

答案 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方法。

希望它会有所帮助:)。