使用警报管理器立即启动警报

Alarm starts right away with Alarm manager

我正在使用闹钟管理器发送消息,但闹钟无法正常工作。如果时间是 18 小时,我设置了 8 小时的闹钟,那么它会在那个时间发送消息。

代码如下:

public class Time_Picker extends AppCompatActivity {
    TimePicker time_picker;
    String tag = "pritesh";
    static AlarmManager[] alarmManager = new AlarmManager[5];
    static PendingIntent[] pendingIntent = new PendingIntent[5];
    EditText message;
    EditText phone;
    Intent myIntent;

    //AlarmManager alarmManager;
    //PendingIntent pendingIntent;

    public static String Phone;
    public static String Message;
    public int i;
    array ob = new array();
    static ArrayList<PendingIntent> pendingarray = new ArrayList<>(5);

    public void setAlarm(View view) {

        //AlarmManager alarmManager[] = new AlarmManager[5];

        //if(prevention.timer == 0) {
        Phone = phone.getText().toString();
        Message = message.getText().toString();
        phone.setText("");
        message.setText("");

        //Validating if any field empty
        if (Phone.length() >= 10 && Message.length() > 0) {
            Toast.makeText(this.getApplicationContext(),
                           "Your SMS will be sent soon",
                           Toast.LENGTH_SHORT).show();

            // Getting Calender Reference
            Calendar cal = Calendar.getInstance();
            int currentApiVersion = android.os.Build.VERSION.SDK_INT;
            if (currentApiVersion > android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
                cal.set(Calendar.MINUTE, time_picker.getMinute());
                cal.set(Calendar.HOUR_OF_DAY, time_picker.getHour());
            }
            else {
                //Setting the date and time from the time picker
                cal.set(Calendar.MINUTE, time_picker.getCurrentMinute());
                cal.set(Calendar.HOUR_OF_DAY, time_picker.getCurrentHour());
            }

            int a = (Calendar.getInstance().get(Calendar.SECOND) * 1000);
            i = array.select;
            myIntent = new Intent(this, MyReceiver.class);
            myIntent.putExtra("pos", array.select);

            // Pending Intent for sending the intent afterwards
            pendingIntent[array.select] = PendingIntent.getBroadcast(this.getApplicationContext(), array.select, myIntent, 0);
            alarmManager[array.select] = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
            alarmManager[array.select].set(AlarmManager.RTC, cal.getTimeInMillis() - a, pendingIntent[array.select]);

            pendingarray.add(pendingIntent[array.select]);
            sms_list.Phone[array.select] = Phone;
            Intent back = new Intent(this, sms_list.class);
            back.putExtra("PHONE", Phone);
            back.putExtra("Flag", 2);
            back.putExtra("MSG", Message);
            back.putExtra("HOUR", (int) cal.get(Calendar.HOUR_OF_DAY));
            back.putExtra("MIN", (int) cal.get(Calendar.MINUTE));

            startActivity(back);

            //int b;
        }
        else
        {
            Toast.makeText(this.getApplicationContext(), "Please Fill Up All The Details", Toast.LENGTH_SHORT).show();
            array.a[array.select] = false;
            ob.sort();
        }
    }
}

即使我设置了一个有很大差异的时间,代码也不起作用。

我可以使用 12 小时制设置闹钟吗?

您不能为已经过去的时间设置闹钟。

 alarmManager[array.select].set(AlarmManager.RTC, cal.getTimeInMillis() - a, pendingIntent[array.select]);

试试下面的未来时间:

alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
             SystemClock.elapsedRealtime() +
               60 * 1000, alarmIntent);