Java AlarmManager.eassed\u REALTIME\u WAKEUP在android中的具体功能是什么
我正在尝试学习android中的AlarmManager。我遇到了一些问题来理解AlarmManager.Appeased\u REALTIME\u WAKEUP的用法。但是当我在我的应用程序中使用它并且应用程序运行时,我单击了后退按钮,认为alarm manager将在此处设置的报警间隔时间后再次调用该活动Java AlarmManager.eassed\u REALTIME\u WAKEUP在android中的具体功能是什么,java,android,alarmmanager,Java,Android,Alarmmanager,我正在尝试学习android中的AlarmManager。我遇到了一些问题来理解AlarmManager.Appeased\u REALTIME\u WAKEUP的用法。但是当我在我的应用程序中使用它并且应用程序运行时,我单击了后退按钮,认为alarm manager将在此处设置的报警间隔时间后再次调用该活动 alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
但是什么也没发生。请解释一下AlarmManager.Appeased\u REALTIME\u WAKEUP的含义
MainActivity.java
public class MainActivity extends AppCompatActivity {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent = PendingIntent.getActivity(this, 0, intent,0);
Log.d("asd","initialized alarmintent");
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
Log.d("asd", "alarm set");
}
}
AlarmReceiver.java
public class AlarmReceiver extends AppCompatActivity
{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_layout);
Log.d("asd","writing textview");
tv=(TextView)findViewById(R.id.textview);
tv.setText("called");
}
}
我会使用
AlarmManager.RTC\u WAKEUP
,而不是AlarmManager.eassed\u REALTIME\u WAKEUP
。下面是我如何在最近的应用程序中使用AlarmManager的示例:
MainActivity.class:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, AlarmReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
mAlarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
// Cancel any existing service(s)
mAlarmManager.cancel(pendingIntent);
// Start service
long alarmTime = System.currentTimeMillis() + 10000L; // 10 seconds from now
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mAlarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
} else {
mAlarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
}
}
AlarmReceiver.class:
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver() { }
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "AlarmService Triggered.", Toast.LENGTH_SHORT).show();
Log.d(this.getClass().getSimpleName(), "Service triggered");
}
}
您的AlarmReceiver类似乎在扩展AppCompatActivity
,但这不起作用-您需要像我所做的那样扩展Broadcast Receiver
。然后,在AlarmReceiver中的onReceive()
函数中,您需要导航到所需的活动,如下所示:
Intent newIntent = new Intent(context, NewActivity.class);
context.startActivity(newIntent);
尝试这些更改,看看它们是否有效 您的代码应该可以正常工作。 确保您已在清单中声明了AlarmReceiver活动,例如:
<activity
android:name=".AlarmReceiver"
android:label="@string/title_activity_alarm_receiver"
android:theme="@style/AppTheme.NoActionBar"></activity>
“但什么也没发生”--可能是名字奇怪的AlarmReceiver出现了问题,例如它没有在清单中注册。检查LogCat是否有任何消息。@Commonware,我已经在清单文件中为AlarmReceiver创建了条目。这是我在触发报警时调用的类。你能解释一下AlarmManager.Appeased_REALTIME_WAKEUP的用法吗?@a874请看这里的描述——正如指南所说,RTC更适用于实际的“报警”然而,实时唤醒更多的是用于调度任务。也就是说,在我自己的实现中,我仍然更喜欢RTC。