Java Android设置报警时钟立即触发
我创建了一个简单的应用程序来试用Java Android设置报警时钟立即触发,java,android,alarmmanager,android-alarms,Java,Android,Alarmmanager,Android Alarms,我创建了一个简单的应用程序来试用setAlarmClock()。main活动中只有一个按钮,单击时会调用setAlarm 代码如下 main活动 public class MainActivity extends AppCompatActivity { private static final String TAG = "alarmclock.MainActivity"; @Override protected void onCreate(Bundl
setAlarmClock()
。main活动中只有一个按钮
,单击时会调用setAlarm
代码如下
main活动
public class MainActivity extends AppCompatActivity {
private static final String TAG = "alarmclock.MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void setAlarm(View view) {
Context context = getApplicationContext();
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
long nextTrigger = SystemClock.elapsedRealtime()+10*1000;
Log.i(TAG, SystemClock.elapsedRealtime() + ": scheduling next alarm at " + nextTrigger);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
AlarmManager.AlarmClockInfo ac = new AlarmManager.AlarmClockInfo(nextTrigger, null);
alarmManager.setAlarmClock(ac, pendingIntent);
}
}
AlarmReceiver
public class AlarmReceiver extends BroadcastReceiver {
private static final String TAG = "alarmclock.AlarmReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, SystemClock.elapsedRealtime() + " in AlarmReceiver onReceive()");
}
}
我基本上会在10秒钟后触发警报,但由于某种原因,它会立即触发
2020-09-21 22:09:56.664 17910-17910/com.example.alarmclock I/alarmclock.MainActivity: 3362358: scheduling next alarm at 3372358
2020-09-21 22:09:56.687 17910-17910/com.example.alarmclock I/alarmclock.AlarmReceiver: 3362382 in AlarmReceiver onReceive()
如果我使用setExactAndAllowHileIDLE
,同样的代码似乎可以正常工作。但我特别想尝试设置闹钟
需要墙时间:
自历元起触发基础报警的时间(以壁时间毫秒为单位)
但是您使用的是elapsedRealtime()
time,因此请使用System.currentTimeMillis
来解决此问题。需要墙时间:
自历元起触发基础报警的时间(以壁时间毫秒为单位)
但是您使用的是
elapsedRealtime()
time,所以请使用System.currentTimeMillis
来解决此问题。在我将SystemClock.elapsedRealtime()
更改为System.currentTimeMillis()
后,此功能正常
在更详细地阅读了之后,我意识到AlarmClockInfo
构造函数的第一个参数
长:在墙时间内触发基础报警的时间
从新纪元开始的毫秒
这就是System.currentTimeMillis()
给出的结果
另一方面,SystemClock.elapsedRealtime()
返回
自系统启动以来的时间
这将永远是一个小得多的数字比墙的时间,因为时代。因此,警报会立即安排,因为
如果规定的触发时间已过,则会立即触发报警
2020-09-21 22:09:56.664 17910-17910/com.example.alarmclock I/alarmclock.MainActivity: 3362358: scheduling next alarm at 3372358
2020-09-21 22:09:56.687 17910-17910/com.example.alarmclock I/alarmclock.AlarmReceiver: 3362382 in AlarmReceiver onReceive()
在我将
SystemClock.elapsedRealtime()
更改为System.currentTimeMillis()
后,它工作了
在更详细地阅读了之后,我意识到AlarmClockInfo
构造函数的第一个参数
长:在墙时间内触发基础报警的时间
从新纪元开始的毫秒
这就是System.currentTimeMillis()
给出的结果
另一方面,SystemClock.elapsedRealtime()
返回
自系统启动以来的时间
这将永远是一个小得多的数字比墙的时间,因为时代。因此,警报会立即安排,因为
如果规定的触发时间已过,则会立即触发报警
2020-09-21 22:09:56.664 17910-17910/com.example.alarmclock I/alarmclock.MainActivity: 3362358: scheduling next alarm at 3372358
2020-09-21 22:09:56.687 17910-17910/com.example.alarmclock I/alarmclock.AlarmReceiver: 3362382 in AlarmReceiver onReceive()
不久后发现,并在同一时间发布了答案。但是谢谢你这么快的回复@崇子馨快乐编码:)不久后发现,并在同一时间发布了答案。但是谢谢你这么快的回复@崇子欣快乐编码:)