gpt4 book ai didi

android - Android 8 或 9 的后台地理围栏不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:51 26 4
gpt4 key购买 nike

我尝试在用户到达指定区域时向其显示推送警报。

所以我从以下代码编写了我的应用程序:https://developer.android.com/training/location/geofencing

如果我的应用程序使用跟踪用户位置的服务运行,它会完美运行。

例如,如果我启动谷歌地图,它也可以工作,它也会跟踪我的位置。将出现推送。

但如果我关闭我的应用程序,推送将不会出现,因此如果没有应用程序跟踪我的位置,则不会检测到地理围栏。

这正常吗?如何让它一直工作?如果您需要根据您的位置提供前台服务,地理围栏有什么意义?

 public void createGeofenceAlerts(LatLng latLng, int radius) {
final Geofence enter = buildGeofence(ID_ENTER, latLng, radius, Geofence.GEOFENCE_TRANSITION_ENTER);
final Geofence exit = buildGeofence(ID_EXIT, latLng, radius, Geofence.GEOFENCE_TRANSITION_EXIT);
final Geofence dwell = buildGeofence(ID_DWELL, latLng, radius, Geofence.GEOFENCE_TRANSITION_DWELL);

GeofencingRequest request = new GeofencingRequest.Builder()
.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
.addGeofence(enter)
.addGeofence(exit)
.addGeofence(dwell)
.build();

fencingClient.addGeofences(request, getGeofencePendingIntent()).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Timber.i("succes");
Toast.makeText(mContext, "Geofence added", Toast.LENGTH_LONG).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Timber.e(e,"failure");
Toast.makeText(mContext, "Geofence ERROR", Toast.LENGTH_LONG).show();
}
});
}

private PendingIntent getGeofencePendingIntent() {
Intent intent = new Intent(mContext, GeofenceTransitionsIntentService.class);
PendingIntent pending = PendingIntent.getService(
mContext,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
return pending;
}

private Geofence buildGeofence(String id, LatLng center, int radius, int transitionType) {
Geofence.Builder builder = new Geofence.Builder()
// 1
.setRequestId(id)
// 2
.setCircularRegion(
center.getLatitude(),
center.getLongitude(),
radius)
// 3
.setTransitionTypes(transitionType)
// 4
.setExpirationDuration(Geofence.NEVER_EXPIRE);
if (transitionType == Geofence.GEOFENCE_TRANSITION_DWELL) {
builder.setLoiteringDelay(LOITERING_DELAY);
}

return builder.build();
}

最佳答案

我已经使用 GeoFence 很长时间了,我有同样的问题,在尝试了不同的解决方案后我自己得到了答案,所以基本上,GeoFence 只有在手机中的任何应用程序正在获取位置时才会触发一些 x 持续时间。如果您测试 google 提供的 GeoFence 示例应用程序,您会发现该应用程序仅在您打开 Google map 应用程序时才能运行,这是因为 Google map 是设备中唯一被动请求位置的应用程序。

为了证明,您可以从下面的链接中克隆 GeoFence 示例和 LocationUpdateForGroundService 示例 https://github.com/googlesamples/android-play-location 同时运行 GeoFence 和 LocationUpdateForGroundService,您会注意到,通过从模拟器更改纬度和经度,您现在不再需要打开 Google map ,因为现在有另一个应用正在请求位置。

因此,请务必在 GeoFence 应用程序中创建一个前台服务,并使用 Fuse Location Client 请求位置更新一段时间。

关于android - Android 8 或 9 的后台地理围栏不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54348093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com