Работа с радиусом в Google Map Android API 2

Можно ли показать сообщение в моем приложении для Android, когда пользователь находится с заданным радиусом местоположения (широта и долгота). Я использую Google Map API 2.

Например, учитывая эту широту и долготу 40,218835, -74,000666, и если пользователь находится в радиусе 10 километров от этого местоположения, я хочу, чтобы всплывающее сообщение «вы находитесь рядом с водяным знаком». например, тост, отображающий это сообщение.

Я просмотрел некоторые другие сообщения в Stackoverflow и посмотрел несколько руководств по радиусу, но я не могу понять, как получить то, что я хочу.

Любая помощь приветствуется


person Henry    schedule 16.02.2015    source источник


Ответы (2)


Да, есть. Вы используете добавитьProximityAlert с помощью BroadcastReveiver.

Я приведу часть кода, аналогичную той, над которой я работал некоторое время назад, это должно дать вам общее представление о том, что искать...

// IN SOME CLASS, YOU REGISTER BROADCAST RECEIVER FOR SOME COORDINATES
Intent thisIntent = new Intent("my.package.name.MyProximityReceiver"); // MyProximityReceiver is the name of the class where you extend BroadcastReceiver
Bundle thisBundle = new Bundle();
thisBundle.putString("placeName", "SomePlaceName");
thisIntent.putExtras(thisBundle);
PendingIntent proximityIntent = PendingIntent.getBroadcast(getBaseContext(), 0,
        thisIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locManager.addProximityAlert(40.218835,-74.000666, 
        10000 , -1, proximityIntent);  // 10000 is the 10km radius , -1 means no expiration, read more in the link provided above

// END OF THAT SOME CLASS YOU ARE REGISTERING BROADCASTRECEIVER IN


// CLASS MyProximityReceiver
public class MyProximityReceiver extends BroadcastReceiver {

      public String placeName;

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

          Log.d("TAG_IN_BROADCAST", "In broadcast receiver");
          String key = LocationManager.KEY_PROXIMITY_ENTERING;
          boolean entering = intent.getBooleanExtra(key, false);

          Bundle thisBundle = intent.getExtras();
          if (thisBundle != null)
          {
              placeName = thisBundle.getString("placeName");
          }

          if (entering)
          {
              Log.e("TAG_ENTERING","ENTERING");
              // SOMEONE ENTERED THE AREA
          }
          else
          {
              Log.e("TAG_LEAVING", "LEAVING");
              // SOMEONE EXITED THE AREA
          }
              ...
              ...
      }
      ....
}

Это, вероятно, не будет работать (это только части кода), но это просто для того, чтобы дать вам представление о том, как вы можете делать то, что хотите...

Надеюсь это поможет...

person miselking    schedule 17.02.2015
comment
Выглядит довольно запутанно, но, тем не менее, я попробую, и если это сработает, ваш мужчина!!! - person Henry; 17.02.2015

Техника, которую вы ищете, — это геозона. Официальную документацию по геозоне на веб-сайте Google см. на этой< /а> документ.

Хороший учебник для Android по этому вопросу см. в этом документе.

Надеюсь это поможет!!

person AniV    schedule 17.02.2015