我有一些疑问,我想澄清Android中的AlarmManager类 我有一个需要的应用程序:
button.performClick()
)。 因此,我已成功创建了一个名为alarm.java
的活动,在res\layout
中创建了布局并将其添加到AndroidManifest.xml
。另外,我已在alarm.java
课程中成功设置了警报:
onCreate(){
alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
intent = new Intent(context, MyActivity.class);
pi = PendingIntent.getBroadcast(this.getApplicationContext(), ALARM_ID, intent, 0);
}
onClick(){
cal.setTimeInMillis(System.currentTimeMillis());
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
Toast.makeText(getApplicationContext(), "Alarm Set For " + hour + ":" + minute + " " + ampm, Toast.LENGTH_LONG).show();
}
现在,在我的MyActivity.java
课程中,这是主要活动,我添加了BroadcastReceiver
public BroadcastReceiver AlarmReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
/*This is the part I got from SO for starting an activity from `BroadcastReceiver`
Intent i = new Intent();
i.setClassName("com.kanishka.nightstalker.homeautomation", "com.kanishka.nightstalker.homeautomation.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);*/
Toast.makeText(getApplicationContext(), "APP STARTED", Toast.LENGTH_LONG).show();
button.performClick();
}
};
显然,这种方法不起作用,因为我看到在经过的时间后没有弹出Toast
。我有点明白这个问题是什么,我应该使用Service
来解决这个问题。但据我所知,AlarmManager
本身在后台运行,并且应该在经过的时间内触发BroadcastReceiver
MyActivity.java
。我哪里错了?
答案 0 :(得分:2)
我哪里错了?
您正在使用setInexactRepeating()
。在这里,"不精确"表示"不准确",因此警报将在您请求的时间INTERVAL_DAY
内的某个时间发生。
您需要花费当前时间,然后设置小时和分钟,这可能会导致过去一段时间。
您正在为Intent
创建MyActivity
,这可能不是BroadcastReceiver
(或者,如果是,MyActivity
是一个非常奇怪的名字选择)。
如果您希望闹钟响起"即使应用已关闭",您还需要使用在清单中注册的BroadcastReceiver
。
在主要活动"中执行某项功能(如button.performClick())是不可能的,因为没有活动"如果应用是闭合"