Nano Hash - криптовалюты, майнинг, программирование

Android — обновлять местоположение каждые x минут

Я новичок в Android, и это мой первый пост здесь, поэтому, пожалуйста, будьте добры! :-)

Я пытаюсь создать службу, которая работает в фоновом режиме и обновляет местоположение каждые x минут. Чтобы запускать его каждые x минут, я использую AlarmManager, как описано здесь: Пример диспетчера тревог

Вот что у меня есть:

package com.example.service1;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.util.Log;

public class Scheduler extends BroadcastReceiver{

LocationManager locationManager;
LocationListener locationListener;


@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();




    //Code which is executed every X seconds/minutes

    getLocation(context);

    //End of Code
    wl.release();

}

public void setScheduler(Context context) {
    AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, Scheduler.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 20, pi);

}


//Method to get the Location

public void getLocation(Context context) {

    Log.e("null","getLocation");
    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    locationListener = new LocationListener() {

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            Log.e(null, "location change");
            makeUseOfLocation(location);
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStatusChanged(String provider, int status,
                Bundle extras) {
            // TODO Auto-generated method stub

        }

    };

}

//Method to work with the location Data; Instance of Point is created
public void makeUseOfLocation(Location location) {
    Log.e(null,"makeuse");

    Log.e(null,location.getLatitude() + "");
}

}

getLocation() вызывается каждые 20 секунд, но тогда он никогда не запускается onLocationChanged() (я использую EmulatorControl в Eclipse, чтобы изменить местоположение).

У меня была такая же проблема раньше, когда я использовал ScheduledExecutorService вместо AlarmManager.

Может кто-нибудь помочь мне?


Ответы:


1

Глядя на ваш код, я никогда не вижу вызова locationManager.requestLocationUpdates() с вашим слушателем в качестве аргумента.

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

Вероятно, вы хотите зарегистрировать только одного слушателя вместо того, чтобы каждый раз регистрировать новый.

25.08.2013

2

Попробуй это..

 protected void updateNotification() {
         LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
         LocationListener locationListener = new MyLocationlistener();

         lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, normallocationwait, 0.250f, locationListener);
         location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
   }

   private class MyLocationlistener implements LocationListener {

     public void onLocationChanged(Location location){
         if(location!=null){
             if(location.hasAccuracy()){
                   dumpLocation(location);
             }else{
                   dumpLocation(location);
            }
         } 
     }

     public void onProviderDisabled(String provider){
         Log.v("Loc Update","\nProvider disabled: " + provider);
     }

     public void onProviderEnabled(String provider){
         Log.v("Loc Update","\nProvider enabled: " + provider);
     }

     public void onStatusChanged(String provider, int status, Bundle extras){
         Log.v("Loc Update","\nProvider status changed: " + provider + ", status="
                    + status + ", extras=" + extras);
     }
24.08.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..