当您到达应用程序中添加的最近位置(100米)时,我需要提醒

时间:2017-04-06 06:50:09

标签: android

我的Android应用程序在功能上使用谷歌mapv2图像和服务器中的地址存储在应用程序中添加当前位置和图像。现在,当你在app中添加的位置达到100米时我想要提醒。你能帮助我吗。谢谢

2 个答案:

答案 0 :(得分:0)

您需要创建和监控地理围栏。

创建地理围栏列表:

首先,使用Geofence.Builder创建地理围栏,为地理围栏设置所需的半径,持续时间和过渡类型。例如,要填充名为mGeofenceList的列表对象:

mGeofenceList.add(new Geofence.Builder()
    // Set the request ID of the geofence. This is a string to identify this
    // geofence.
    .setRequestId(entry.getKey())

    .setCircularRegion(
            entry.getValue().latitude,
            entry.getValue().longitude,
            Constants.GEOFENCE_RADIUS_IN_METERS
    )
    .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS)
    .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
            Geofence.GEOFENCE_TRANSITION_EXIT)
    .build());

指定地理围栏和初始触发器:

private GeofencingRequest getGeofencingRequest() {
    GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
    builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
    builder.addGeofences(mGeofenceList);
    return builder.build();
}

定义地理围栏转换的意图:

Intent intent = new Intent(this, GeofenceTransitionsIntentService.class);
// We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when
// calling addGeofences() and removeGeofences().
return PendingIntent.getService(this, 0, intent, PendingIntent.
        FLAG_UPDATE_CURRENT);

添加地理围栏:

LocationServices.GeofencingApi.addGeofences(
            mGoogleApiClient,
            getGeofencingRequest(),
            getGeofencePendingIntent()
    ).setResultCallback(this);

处理地理围栏转换:

GeofenceTransitionsIntentService从意图中获取地理围栏事件,确定地理围栏过渡的类型,并确定触发了哪些已定义的地理围栏。然后它发送通知作为输出。

public class GeofenceTransitionsIntentService extends IntentService {
   ...
    protected void onHandleIntent(Intent intent) {
        GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
        if (geofencingEvent.hasError()) {
            String errorMessage = GeofenceErrorMessages.getErrorString(this,
                    geofencingEvent.getErrorCode());
            Log.e(TAG, errorMessage);
            return;
        }

        // Get the transition type.
        int geofenceTransition = geofencingEvent.getGeofenceTransition();

        // Test that the reported transition was of interest.
        if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||
                geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {

            // Get the geofences that were triggered. A single event can trigger
            // multiple geofences.
            List triggeringGeofences = geofencingEvent.getTriggeringGeofences();

            // Get the transition details as a String.
            String geofenceTransitionDetails = getGeofenceTransitionDetails(
                    this,
                    geofenceTransition,
                    triggeringGeofences
            );

            // Send notification and log the transition details.
            sendNotification(geofenceTransitionDetails);
            Log.i(TAG, geofenceTransitionDetails);
        } else {
            // Log the error.
            Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
                    geofenceTransition));
        }
    }

查看Creating and Monitoring Geofences的官方文档以获取有关它的详细信息。

答案 1 :(得分:-1)

非常简单。您实现Localistener类并使用distanceTo函数检查距离,然后使用notificationmanager。我实际上无法正确理解这个问题。你只想要位置距离或其他东西......你能说清楚吗?