2012-04-07 2 views
0

Я создал службу, которая отправляет местоположение устройства на сервер, где это место хранится в БД.Служба Android не останавливается

В этой службе я реализовал LocationListner и внутри метода onLocationChanged im, отправляя его на сервер через HttpPost, устанавливая будильник для службы (так как я хочу, чтобы он отправлял местоположение каждый час), а затем останавливал оказание услуг.

Проблема даже в том, что когда Ive называется «stopself», служба продолжает работать несколько раз перед остановкой (как в случае отправки местоположения в несколько раз больше). Как я могу изменить его так, чтобы он немедленно останавливался.

ПФБ код для метода onLocationChanged

public void onLocationChanged(android.location.Location location) { 
      if(location!=null) 
      { 
       System.out.println("here"); 
       latid = location.getLatitude(); 
       longid = location.getLongitude(); 
       String userinfo = ``Double.toString(latid)+"&&&&"+Double.toString(longid); 
       Location = userinfo; 

       Toast.makeText(getApplicationContext(), Location, 1000).show(); 

       HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost("http://www.easymontra.in/location/try.php"); 

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
        nameValuePairs.add(new BasicNameValuePair("lat", Double.toString(latid))); 
        nameValuePairs.add(new BasicNameValuePair("long", Double.toString(longid))); 
        try { 
         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
        } catch (UnsupportedEncodingException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        // Execute HTTP Post Request 
        try { 
         HttpResponse response = httpclient.execute(httppost); 
        } catch (ClientProtocolException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 


       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 



        Calendar calendar = Calendar.getInstance(); 

        calendar.setTimeInMillis(System.currentTimeMillis()); 

        calendar.add(Calendar.MINUTE, 60); 

        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); 

        Toast.makeText(getApplicationContext(), "stopping now", 1000).show(); 
        stopSelf(); 



      } 

ответ

1

stopSelf() является запросом и это зависит от выполнения, чтобы, когда он обрабатывает запрос. Это асинхронный вызов метода, поэтому нельзя ожидать, что служба немедленно завершится, когда этот метод будет вызван. Кроме того, кажется, что в вашем случае несколько обновлений местоположения начинают срабатывать к моменту остановки вашего сервиса, поэтому вместо этого вы можете прекратить прослушивание обновлений местоположения с помощью locationManager.removeUpdates(locationListener);, поставив его перед stopSelf();

+0

привет, спасибо за ответ, когда он поворачивается я звонил в приемник местоположения с параметрами времени и расстояния как 0, которые вызывали проблемы, теперь все они разобрались. –

Смежные вопросы