Android设置多个报警

gzszwxb4  于 2023-03-16  发布在  Android
关注(0)|答案(4)|浏览(271)

我正在尝试实现一个Android应用程序,需要报警(或提醒)多次沿着时间。
我已经搜索过了,但我找到的最接近的是一个固定数量的警报集,我猜这个例子不起作用。
我想知道的是,是否存在一种动态设置多个警报的方法,如警报数组,然后在其特定的时间戳触发这些警报。

umuewwlo

umuewwlo1#

如果你想设置多个闹钟(重复或单个),那么你只需要用不同的requestCode创建它们的PendingIntent,如果requestCode相同,那么新的闹钟将覆盖旧的闹钟。
下面是创建多个单一警报并将它们保存在ArrayList中的代码。我将PendingIntent保存在数组中,因为这是您取消警报所需的。

// context variable contains your `Context`
AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();

for(i = 0; i < 10; ++i)
{
   Intent intent = new Intent(context, OnAlarmReceiver.class);
   // Loop counter `i` is used as a `requestCode`
   PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0);
   // Single alarms in 1, 2, ..., 10 minutes (in `i` minutes)
   mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
                SystemClock.elapsedRealtime() + 60000 * i, 
                pendingIntent); 

   intentArray.add(pendingIntent);
}

另请参阅此问题:How to set more than one alarms at a time in android? .

vdgimpew

vdgimpew2#

您可以设置闹钟的重复频率:
在这种情况下:

public void AddAlarm(int requestCode,MutableDateTime dueDate,int repeat) {
        Intent intent = new Intent(context, AlarmReceiver.class);
        intent.putExtra(Constants.RECORD_ID, requestCode);
        intent.putExtra("REPEAT", repeat);
        PendingIntent operation = PendingIntent.getBroadcast(context, requestCode, intent,  PendingIntent.FLAG_ONE_SHOT );
        MutableDateTime due = dueDate.toMutableDateTime();
        switch(repeat){
        case NO_REPEAT:
            due.addMinutes(0);
            break;
        case DAILY:

            due.addDays(1); 
            break;
        case WEEKLY:
            due.addWeeks(1);
            break;
        case MONTHLY:
            due.addMonths(1);
            break;
        case MONTHLY_2:
            due.addWeeks(5);            
            break;
        case YEARLY:
            due.addYears(1);
            break;
        }
        due.add(-(dueDate.getMillis()));
        due.setSecondOfMinute(0);
        dueDate.setSecondOfMinute(0);
        alarm.cancel(operation);
        alarm.set(AlarmManager.RTC_WAKEUP, dueDate.getMillis(), operation);
        alarm.setRepeating(AlarmManager.RTC_WAKEUP, dueDate.getMillis(), due.getMillis(), operation);
}
q3qa4bjr

q3qa4bjr3#

为了动态设置多个警报,我使用的方法是创建一个警报。然后在我的警报设置类中,初始化一个静态整数(用作请求代码),每当我点击主活动中的“添加警报”按钮时,它将从我的主活动中每次递增。

主要活动.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void addAlarmClick(View v) {
    AlarmActivity.broadcastCode++;
    startActivity(new Intent(this, AlarmActivity.class));
}
}

报警活动.java

public class AlarmActivity extends AppCompatActivity {`

public static int broadcastCode=0;
/*some code here*/
Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this,
                            broadcastCode, myIntent, 0);

我希望这会有所帮助。

3xiyfsfu

3xiyfsfu4#

您可以在pendingIntent中设置连接到时间请求代码:

pendingIntent = PendingIntent.getBroadcast(
    this, (calendar.timeInMillis).toInt(), intent, 0
)

注意:requestCode也可以是绝对随机整数

相关问题