Android 未从AlarmManager调用BroadcastReceiver

Android 未从AlarmManager调用BroadcastReceiver,android,broadcastreceiver,alarmmanager,Android,Broadcastreceiver,Alarmmanager,我不想看到AlarmManager如何为Oreo设置ExactAndAllowHileId,并为此编写了非常简单的服务,但它不起作用,我真的不知道原因。到目前为止,我看到的所有原因都与我的代码无关。请告诉我哪里出错了 主要活动 广播接收机 服务 终于显现 您可以尝试给定的代码。您可以像这样直接调用LocationService或参考此代码 关于您活动中的这一行代码: alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REA

我不想看到AlarmManager如何为Oreo设置ExactAndAllowHileId,并为此编写了非常简单的服务,但它不起作用,我真的不知道原因。到目前为止,我看到的所有原因都与我的代码无关。请告诉我哪里出错了

主要活动 广播接收机 服务 终于显现


您可以尝试给定的代码。您可以像这样直接调用LocationService或参考此代码


关于您活动中的这一行代码:

alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis() +  60 * 1000, pendingIntent);
您希望使用SystemClock.elapsedRealtime()而不是System.currentTimeMillis();您的代码应该如下所示:

alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() +  60 * 1000, pendingIntent);

您需要从设备启动后的毫秒数开始计算间隔时间,而不是从1970年1月1日起的毫秒数。

某个时间报警接收器不呼叫确切时间如果不呼叫,请等待某个时间

为获得服务,请更改广播接收器代码

公共类LocationReceiver扩展了BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    Log.d("testt", "LocationReceiver - onReceive");
    Intent i = new Intent(context, LocationService.class);
    context.startForegroundService(intent);
}}
在您的服务OnCreate方法中。
startForeground(11,buildForegroundNotification());

非常感谢!这是我所缺少的。仅供参考-
    <service android:name=".LocationService" android:exported="false"/>
    <receiver android:name=".LocationReceiver"/>
</application>
Intent myIntent = new Intent(this, LocationService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MINUTE, 2);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis() +  60 * 1000, pendingIntent);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() +  60 * 1000, pendingIntent);
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("testt", "LocationReceiver - onReceive");
    Intent i = new Intent(context, LocationService.class);
    context.startForegroundService(intent);
}}