0

デバイスの場所をサーバーに送信するサービスを作成しました。サーバーでは、その場所がDBに保存されます。

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

問題は、「stopself」と呼ばれるiveが停止する前にサービスが数回実行され続ける場合でもあります(のように、場所をさらに数回送信します)。彼のサービスがすぐに停止するように変更するにはどうすればよいですか。

onLocationChangedメソッドのコードをPFB

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();



            }
4

1 に答える 1

1

stopSelf()はリクエストであり、リクエストをいつ処理するかはランタイムに依存します。これは非同期メソッド呼び出しであるため、このメソッドが呼び出されたときにサービスがすぐに終了するとは思わない場合があります。また、あなたの場合、サービスが停止するまでにさらにいくつかの位置情報の更新がトリガーされているようです。代わりにlocationManager.removeUpdates(locationListener);、前に配置して位置情報の更新のリッスンを停止できますstopSelf();

于 2012-04-07T13:18:18.850 に答える