Android:如何检查我是否到达/靠近我的目的地?

时间:2013-11-29 06:46:29

标签: android google-maps-android-api-2 locationmanager

我正在开发一个应用程序,当您到达目的地/靠近目的地时唤醒给您,并向您发送警报等通知。

我是否可以连续检查用户的当前位置以及用户何时接近/到达目的地?

如果有可能请给我样本/教程,以便我可以轻松实现。

到目前为止,我在下面的代码中实现了“通知”。

public class ProximityReceiver extends BroadcastReceiver {

private static final int ALARM_DURATION = 6000;
public static final String INTENT_NAME = "com.xxx.xxx.intent.PROXIMITY";
private static final long VIBRATION_PATTERN[];

static {
    long al[] = new long[6];
    al[1] = 1000L;
    al[2] = 500L;
    al[3] = 1000L;
    al[4] = 500L;
    al[5] = 1000L;
    VIBRATION_PATTERN = al;
}

@Override
public void onReceive(Context context, Intent intent) {



    MyMainApplication wakeappapplication = (MyMainApplication) context
            .getApplicationContext();

    if (wakeappapplication.getStatus().equals(WakeAppStatus.STARTED)) {
        wakeappapplication.setStatus(WakeAppStatus.APPROACHING);
        long l = 6000L + System.currentTimeMillis();
        ((AlarmManager) context.getSystemService("alarm")).setRepeating(0,
                l, 6000L, wakeappapplication.getProximityPendingIntent());
    }

    NotificationManager notificationmanager = (NotificationManager) context
            .getSystemService("notification");

    notificationmanager.cancel("ProximityReceiver", 0);

    Notification notification = new Notification(
            R.drawable.ic_stat_notify_wakeapp,
            context.getString(R.string.text_wake_title),
            System.currentTimeMillis());

    PendingIntent pendingintent = PendingIntent.getActivity(context, 0,
            new Intent(context, MainWakeMeUpActivity.class), 0);

    notification.setLatestEventInfo(context,
            context.getString(R.string.text_wake_title),
            context.getString(R.string.text_wake_descr), pendingintent);

    android.net.Uri uri = wakeappapplication.getChosenRingtone();

    if (uri != null)
        notification.sound = uri;

    notification.vibrate = VIBRATION_PATTERN;

    if (wakeappapplication.isRaiseVolume())
        ((AudioManager) context.getSystemService("audio")).adjustVolume(1,
                0);

    notificationmanager.notify("ProximityReceiver", 0, notification);


}}

2 个答案:

答案 0 :(得分:3)

您应创建地理围栏并将其添加到Google位置服务,当用户输入特定地理围栏或退出时,它会通知您(回调)。

关注此: http://developer.android.com/training/location/geofencing.html

答案 1 :(得分:2)

您需要实施LocationListener来获取位置更新,但请注意,它可能会像疯了一样耗尽设备的电量。当您获得当前位置时,如果您具有目标lat-long值,则可以使用获取的位置实例使用distanceTo()方法计算距目标的距离。现在,您可以检查distanceTo()方法返回的值是否在接近目的地的可接受范围内。例如,如果当前位置和目的地之间的距离为d,则我到达目的地的可接受范围是在40米以内。