簡體   English   中英

Android:setAlarmManager(…)打開活動,而不是延遲打開

[英]Android : setAlarmManager(…) open an activity instead of delaying the opening

在android中,我必須在特定時間設置鬧鍾,鬧鍾會在一天的正確時間響起並打開活動。

我的問題是函數“ alarmManager.set(...)”立即打開目標活動,並且在到達時間后再次打開同一活動。

我不明白為什么這種情況我該如何糾正?

當前狀態:我有一個時間選擇器,可以幫助我選擇時間。 我也有一個按鈕,當我單擊它時,它會通過從時間選擇器中檢索時間並以ms為單位計算下一個警報,從而調用函數alarmManager.set()。

謝謝

按鈕代碼:

public void setTheAlarm(View view) {

    TimePicker tp_clock = (TimePicker) findViewById(R.id.tp_timeToRing);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    int alarmHours = tp_clock.getCurrentHour();
    int alarmMinutes = tp_clock.getCurrentMinute();

    Toast.makeText(this, "Alarm set for " + alarmHours + "h" + alarmMinutes, Toast.LENGTH_LONG).show();

    Long time = calculateTime(alarmHours, alarmMinutes);
    alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}

函數代碼calculateTime:

public Long calculateTime(int alarmHours, int alarmMinutes) {

    Calendar c = Calendar.getInstance();
    int currentHours = c.get(Calendar.HOUR);
    if (c.get(Calendar.AM_PM) == 1)
        currentHours +=12;
    int currentMinutes = c.get(Calendar.MINUTE);
    int setAlarmHours = 0;
    int setAlarmMinutes = 0;
    int balanceWithMinute = 0;

    if (alarmMinutes >= currentMinutes) {

        setAlarmMinutes = alarmMinutes - currentMinutes;
    }
    else {

        setAlarmMinutes = (60 - currentMinutes) + alarmMinutes;
        balanceWithMinute = 1;
    }
    if (alarmHours > currentHours)
        setAlarmHours = alarmHours - currentHours;

    if (alarmHours < currentHours)
        setAlarmHours = (24 - currentHours) +alarmHours - balanceWithMinute;

    if (alarmHours == currentHours && balanceWithMinute == 1)
        setAlarmHours = 23;

    Long time = new GregorianCalendar().getTimeInMillis()+setAlarmHours*setAlarmMinutes*60*1000;
    return time;
}

AlarmManager的代碼:

package fr.pixelcraft.victor.wackertest.SoundPackage;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import fr.pixelcraft.victor.wackertest.LoginActivity;

public class AlarmReciever extends BroadcastReceiver {

    private String userToken;
    private String userId;

    @Override
    public void onReceive(Context context, Intent intent) {

        Intent i=new Intent(context, PlanASoundActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        userToken = intent.getStringExtra(LoginActivity.USER_TOKEN);
        userId = intent.getStringExtra(LoginActivity.USER_ID);

        i.putExtra(LoginActivity.USER_TOKEN, userToken);
        i.putExtra(LoginActivity.USER_ID, userId);
        context.startActivity(i);

        Toast.makeText(context, "Alarm triggered", Toast.LENGTH_LONG).show();
    }
}

通過https://stackoverflow.com/users/2649012/frank-n-stein

可能您設置的時間已經過去了。 這使AlarmManager立即啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM