Intereting Posts
Как я могу оживить изменение цвета панели состояния и панели инструментов (как это делает новое приложение «Календарь») Android. Можно ли отключить длинный щелчок кнопки дома, чтобы избежать диспетчера задач? Как видеть нажатые изображения на SD-карту в эмуляторе Отладка приложений Android для разжигания огня Представления внутри пользовательской ViewGroup не отображаются после изменения размера Android NDK: load_library: не удается найти srand Android facebook sdk ошибка входа 1118578 Может ли приложение Android установить другое приложение для Android? Как разрешить эту ошибку VFY: невозможно разрешить виртуальный метод Пользовательская обработка ошибок с помощью дооснащения Храните изображение в Blobstore от клиента android и извлекайте blobkey и загружайте URL-адрес для хранения в Datastore. – GAE Как получить мобильное использование данных для моего приложения (например, с помощью TrafficStats) LocalStorage не поддерживается с помощью Phonegap Android OpenGL 3D сбор Нейронная сеть распознает акселерометр

Отправить текущее местоположение на сервере периодически в android

Я должен периодически отправлять текущие данные о местоположении (lat & long) на сервер (например: каждые 5 минут). Есть ли лучший способ? Я знаю, как получить текущее местоположение и как отправить данные на сервер. Но как я повторяю это через периодические промежутки времени?

Solutions Collecting From Web of "Отправить текущее местоположение на сервере периодически в android"

Зарегистрируйте будильник с помощью AlarmManager чтобы просыпаться через 5 AlarmManager когда пользователь впервые открывает приложение. Создайте службу (выберите местоположение и обновите сервер), чтобы запустить, когда будильник уведомляет ваше приложение. После того, как сервис завершит работу, снова зарегистрируйтесь для будильника, чтобы проснуться через 5 минут. Таким образом, вы можете достичь своей задачи.

ссылка

Android: как периодически отправлять местоположение на сервер

http://developer.android.com/reference/android/app/AlarmManager.html

http://developer.android.com/reference/android/app/Service.html

1st Edit – Добавление образца кода

Шаг 1 – Создать диспетчер аварийных сигналов и зарегистрировать тревогу

 AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(Main.this, YourWakefulReceiver.class); bool flag = (PendingIntent.getBroadcast(Main.this, 0, intent, PendingIntent.FLAG_NO_CREATE)==null); /*Register alarm if not registered already*/ if(flag){ PendingIntent alarmIntent = PendingIntent.getBroadcast(Main.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // Create Calendar obj called calendar /* Setting alarm for every one hour from the current time.*/ int intervalTimeMillis = 1000 * 60 * 60; // 1 hour alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calander.getTimeInMillis(), intervalTimeMillis, alarmIntent); } 

Шаг 2 – Создать класс получателя

 public class YourWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent service = new Intent(context, SimpleWakefulService.class); startWakefulService(context, service); } } } 

Setp 3 – Создать класс обслуживания

 public class YourService extends IntentService { private static String tagName = "YourService"; public SimpleWakefulService() { super("YourService"); } @Override protected void onHandleIntent(Intent intent) { // Start your location LocationUtil.startLocationListener(); try { // Wait for 10 seconds Thread.sleep(1000*10); } catch (InterruptedException e) { } //Stop location listener LocationUtil.stopLocationListener(); // upload or save location uploadGps(); SimpleWakefulReceiver.completeWakefulIntent(intent); } } 

Шаг 4 – Регистрация службы и приемника

 <service android:name="com.envision.ghari.services.YourService"></service> <receiver android:name="com.envision.ghari.receivers.YourWakefulReceiver"></receiver> 

Примечание. Этот код предназначен для понимания реализации. Он не будет компилироваться.

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

Является хорошим выбором для отправки периодических запросов …

Вот учебник по использованию BroadcasteReceiver

Лучший способ AlarmManager службу с помощью AlarmManager и опубликовать местоположение, которое вы получаете на сервере.

Поскольку для этого не требуется взаимодействие с пользовательским интерфейсом, вам необходимо создать службу для этого, служба будет вызывать метод requestLocationUpdates, в этом методе пропустить минимальное время параметра до 5 минут.

Я разрабатываю приложение, которое получает позицию сотового телефона весь день в течение 10 и 15 секунд в сервисе, оно отлично работает, но иногда метод OnLocationChanged из прослушивателя провайдера сети перестает быть вызванным.

  import android.location.Address; import android.location.Geocoder; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import java.io.IOException; import java.util.List; import foodinn.databases.LocationUpdaterDatabase; public class LocationUpdatesActivity extends AppCompatActivity { private LocationUpdaterDatabase locationUpdaterDatabase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location_updates); locationUpdaterDatabase = new LocationUpdaterDatabase(this, "Locations.db", null, 1); final Geocoder geocoder = new Geocoder(this); ListView listView = (ListView) findViewById(R.id.locationUpdatesListView); listView.setAdapter(new SimpleCursorAdapter(this, R.layout.location_updates_list_view_view, locationUpdaterDatabase.getLocationUpdates(), new String[] {"latitude", "longitude", "whenUpdated"}, new int[] {R.id.listViewTextView1, R.id.listViewTextView2, R.id.listViewTextView3}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER)); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { double latitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView1)).getText().toString()); double longitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView2)).getText().toString()); try { List<Address> addressList = geocoder.getFromLocation(latitude, longitude, 1); String address = addressList.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String city = addressList.get(0).getLocality(); String state = addressList.get(0).getAdminArea(); String country = addressList.get(0).getCountryName(); String postalCode = addressList.get(0).getPostalCode(); String knownName = addressList.get(0).getFeatureName(); ((TextView) view.findViewById(R.id.listViewTextView4)).setText(address + ", " + city + ", " + country); } catch (IOException e) { e.printStackTrace(); } } }); } }