Как я могу получить изменение данных в результате от службы для использования в деятельности в Android? - PullRequest
0 голосов
/ 25 марта 2012

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

Мне нужно запустить фоновый сервис, который вычисляет местоположение пользователя и скорость.

Мне нужно занятие, чтобы получать постоянно меняющиеся значения широты / долготы и скорости пользователя и использовать эти значения для расчета расстояния между текущим местоположением и местоположением школы (координаты которого будут получены из базы данных) и подать сигнал тревоги, если расстояние меньше, чем уже установленный радиус близости.

1 Ответ

1 голос
/ 26 марта 2012

В чем ваша проблема?Я сделал это в одном из моих последних проектов.Вы должны использовать GPS-приемник в вашем сервисе.Я рекомендую трансляцию для связи между вашим сервисом и вашей деятельностью.Если вы хотите сигнал тревоги, если ваша активность находится в поле зрения, вы должны включить ее в эту деятельность.В противном случае вам нужно создать pendingIntent в вашем сервисе и запустить уведомление, если его время для.

возможно onCreate в вашем сервисе:

    @Override
public void onCreate() {

    myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    myServiceBroadcastReceiver = new MyServiceBroadcastReceiver();
    MyApplication.getAppContext().registerReceiver(myServiceBroadcastReceiver, new IntentFilter(MyApplication.APP_UPDATE_DEMAND));

    myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);




    myLocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    myLocListener = new MyLocListener();


    myLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MyApplication.GPS_UPDATE_PERIOD, 0, myLocListener);
    myLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MyApplication.NETWORK_UPDATE_PERIOD, 0, myLocListener);  // comment this line out if you want only gps!   
}

Ваш пример класса LocationListener

    private class MyLocListener implements LocationListener {

    public void onLocationChanged(Location location) {

        String lat = Double.toString(location.getLatitude());
        String lng = Double.toString(location.getLongitude();
//evaluate lat and lng here, fire a notification or send a broadcast if the activity is in view.

        }
    }

    public void onProviderDisabled(String provider) {
    // Do something 

    }

    public void onProviderEnabled(String provider) {
    // Do something 

    }

    public void onStatusChanged(String provider, int status,
            Bundle extras) {
    // Do something 
    }
}

Если вы хотите оценить широту и долготу в сервисе (активность не отображается), вы можете сделать это в onLocationChanged (), если вы хотите оценить данные GPS в своей активности (в поле зрения), вы можете отправить широковещательную рассылку наваша деятельность.Существуют и другие возможности для передачи данных в мероприятии, но для меня решение с трансляцией было лучшим вариантом (пришлось также отправлять другую информацию).

...