Intereting Posts

MyLocationOverlay или LocationManager для обновления текущего местоположения

Я использую MapView для отображения текущего местоположения пользователя на карте. Чтобы обновить местоположение, когда пользователь находится в движении, у меня есть выбор:

  • Я могу использовать MyLocationOverlay для рисования текущего местоположения и расширения его, чтобы отслеживать местоположение пользователей на ходу и иметь настраиваемый маркер. Проблема с MyLocationOverlay заключается в том, что я не могу контролировать частоту, с которой устройство запрашивает местоположение из GPS. Меня беспокоит утечка батареи.
  • Я могу использовать диспетчер местоположений и подписаться с помощью requestLocationUpdates, чтобы получить местоположение от GPS. Здесь я больше контролирую частоту, с которой запрашивается GPS. Я могу подключить LocationListener и написать там код.

Но я прочитал здесь, в SO, что это может быть не очень хороший подход к использованию диспетчера местоположений, и MyLocationOverlay должен быть предпочтительнее этого.

Также учтите, что мое приложение – это приложение, основанное на местоположении, местоположение пользователя должно отслеживаться по ходу движения.

Могут ли люди предложить, что является лучшим подходом к реализации и оказывает относительно меньшее влияние на аккумулятор.

Обратите внимание, что я новичок в Android, поэтому прошу прощения за любые очевидные ошибки.

Заранее благодарю,

Я использую Little Fluffy Location – его библиотеку, вы устанавливаете время для обновлений или дистанции, эта библиотека делает широковещательный приемник, реализует LocationListener, n уведомляет ваше приложение при изменении местоположения.

Просто, быстро, легко!

См. Эту ссылку:

После изменения местоположения обновите свой оверлей на карте! знак равно

Если вам нужно, я отправляю свое полное решение для местоположений.

Использование Little Fluffy Location 1º:

В манифесте:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-feature android:name="android.hardware.location" android:required="true" /> <uses-feature android:name="android.hardware.location.gps" android:required="false" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <Application...> <service android:name="com.littlefluffytoys.littlefluffylocationlibrary.LocationBroadcastService" /> <receiver android:name="com.littlefluffytoys.littlefluffylocationlibrary.StartupBroadcastReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <receiver android:name="com.littlefluffytoys.littlefluffylocationlibrary.PassiveLocationChangedReceiver" android:exported="true" /> 

2º Создать класс для расширения приложения

 public class YourApplication extends Application { public void onCreate(){ super.onCreate(); LocationLibrary.showDebugOutput(true); LocationLibrary.initialiseLibrary(getBaseContext(), 0, 2 * 60 * 1000, "com.yourpackage.broadcastpackage"); } public static Context getAppContext() { return ApplicationVexPromoter.context; } } 

3º Создайте радиоприемник

 public class Broadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final LocationInfo locationInfo = (LocationInfo) intent.getSerializableExtra(LocationLibraryConstants.LOCATION_BROADCAST_EXTRA_LOCATIONINFO); } } 

И использование:

В вашей деятельности:

 public class YourActivity extends Activity { LocationInfo info; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.id.yourview); info = new LocationInfo(getBaseContext()); double latitude = info.lastLat; double longitude = info.lastLong; } } 

Нужно больше? Пожалуйста, обратитесь к этому

Работает на меня!