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