当应用程序在后台运行时,不会触发GeoFence IntentService

时间:2019-07-24 14:54:48

标签: android geofencing android-geofence

我正在尝试构建一个简单的应用程序,该应用程序在到达某个位置时会拨打电话号码。 我在ResultReceiver中使用IntentService。 可见该应用程序时,一切正常,但当该应用程序在后台时,则没有任何效果。 通知不是我所需要的。我需要打电话。 甚至可以在API 26上实现吗?

添加了服务:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {

    Intent notificationIntent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,
            0, notificationIntent, 0);

    Notification notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
            .setContentTitle("Example Service")
            .setContentIntent(pendingIntent)
            .build();

    startForeground(1, notification);

    mReceiver = GeoFenceHandler.mGeoFenceReceiver;
    GeofencingEvent geoFenceEvent = GeofencingEvent.fromIntent(intent);

    if (geoFenceEvent.hasError()) {
        int errorCode = geoFenceEvent.getErrorCode();
        deliverResultToReceiver(FAILURE_RESULT, "Error" + errorCode);

    } else {
        int transitionType = geoFenceEvent.getGeofenceTransition();

        //User enter transition
        if (Geofence.GEOFENCE_TRANSITION_ENTER == transitionType) {
            deliverResultToReceiver(SUCCESS_RESULT, ENTER_AREA);

            //User exit transition
        } else if (Geofence.GEOFENCE_TRANSITION_EXIT == transitionType) {
            deliverResultToReceiver(SUCCESS_RESULT, LEFT_AREA);
        }
    }

    stopSelf();

    return START_NOT_STICKY;
}

但是,背景仍然没有任何反应。

谢谢。

1 个答案:

答案 0 :(得分:1)

您需要使您的服务成为前台服务。在Android Oreo之后,您需要将后台服务声明为前台服务,并在应用程序处于后台时发出可见通知。

更多内容,请访问:https://developer.android.com/guide/components/services