2012-04-07 62 views
0

デバイスの場所をサーバーに送信し、その場所がDBに格納されるサービスを作成しました。Androidサービスが停止しない

このサービスでは、LocationListnerを実装し、onLocationChangedメソッドの内部で、サービスのアラームを設定するHttpPostを介してサーバーに送信する場所を取得しました(1時間ごとに場所を送信するようにします)。サービス。

問題は、サービスが停止する前に何度か実行され続けている(「場所を数回送信する」と同じです)。彼がサービスを即座に停止できるように、どうすれば変更できますか?

PFB 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と時間と距離の両方のパラメータを持つロケーションリスナーを呼び出していましたが、現在はそのすべてがソートされています。 –

関連する問題