我正在开发一个应用程序,当您到达目的地/靠近目的地时唤醒给您,并向您发送警报等通知。
我是否可以连续检查用户的当前位置以及用户何时接近/到达目的地?
如果有可能请给我样本/教程,以便我可以轻松实现。
到目前为止,我在下面的代码中实现了“通知”。
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);
}}
答案 0 :(得分:3)
您应创建地理围栏并将其添加到Google位置服务,当用户输入特定地理围栏或退出时,它会通知您(回调)。
关注此: http://developer.android.com/training/location/geofencing.html
答案 1 :(得分:2)
您需要实施LocationListener
来获取位置更新,但请注意,它可能会像疯了一样耗尽设备的电量。当您获得当前位置时,如果您具有目标lat-long值,则可以使用获取的位置实例使用distanceTo()
方法计算距目标的距离。现在,您可以检查distanceTo()
方法返回的值是否在接近目的地的可接受范围内。例如,如果当前位置和目的地之间的距离为d,则我到达目的地的可接受范围是在40米以内。