android - 我需要将广播与警报管理器一起使用吗?

标签 android broadcastreceiver alarmmanager android-pendingintent

我正在创建一个警报应用程序,这是运行警报的方法:

public void startAlarm(int minuteToStart)
{

    Toast.makeText(context, "Alarm Start in " + formatTime(minuteToStart), Toast.LENGTH_SHORT).show();
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MINUTE, minuteToStart);    
    Intent intent = new Intent(context, AlarmActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, idPendingIntent, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
}

它会在给定的特定时间后运行此 Activity :

public class AlarmActivity extends Activity {
......
}

它有效,但我看到人们正在使用 BroadcastReceiver,我做错了吗?我也应该使用 BroadcastReceiver 吗?我一直在搜索 BroadcastReceiver,但我不知道它会对我的应用程序产生什么影响。

谢谢。

最佳答案

在一般情况下,A--C 的答案应该是正确的。

但是,您正在使用 RTC_WAKEUP 作为闹钟类型。 唯一我们使用_WAKEUP 警报的保证是如果我们使用BroadcastReceiver那么 Android 将确保设备保持唤醒状态足够长的时间,以便我们执行 onReceive()。任何其他类型的 PendingIntent - Activity 或服务 - 都无法保证,并且设备很可能在 startActivity() 之前重新进入休眠状态>startService() 实际发生。

关于android - 我需要将广播与警报管理器一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617201/

相关文章:

android - 使用android默认闹钟声音列表

java - 如何使用 TarsosDSP 从文件中提取 MFCC 数据?

java - LibGdx 中的 PolygonSprite 仅显示纹理的一部分。

android - BroadcastReceiver 未触发通知操作点击

java - 我调用 getAction() 函数的 Intent 值从哪里来? (这是BroadcastReceiver类的重写方法)

Android - 如何将通知设置为将来的特定日期?

android - 设置Android Circle Progress Bar的粗细

Android 显示来自 BroadcastReceiver 的通知

java - 自动回复广播接收器收到的消息

android - 更新当前使用的应用程序