Java AlarmManager.eassed\u REALTIME\u WAKEUP在android中的具体功能是什么

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

我正在尝试学习android中的AlarmManager。我遇到了一些问题来理解AlarmManager.Appeased\u REALTIME\u WAKEUP的用法。但是当我在我的应用程序中使用它并且应用程序运行时,我单击了后退按钮,认为alarm manager将在此处设置的报警间隔时间后再次调用该活动

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。