2012-02-25 14 views
1

私はGPSサービスを作成し、定期的な位置更新を読み取りました。以前は、GPSがしばらくしてスリープモードに入っていて、その後の場所の更新がなかったという問題がありました。AndroidサービスでGPSがスリープモードに入っています

今や私はコードを変更して、定期的にGPS位置更新を登録解除して登録しました。これにより、GPSがスリープモードに入るという私の問題は解決されますが、新しい問題が作成されます。つまり、

私のサービスはしばらくすると終了します。私はこれの理由を確認することができません。助けてください。

ここ

あなたは文句を言わない、何度も何度も/登録解除位置更新リスナーを登録する必要がありますいくつかのコードが

@Override 
public void onCreate() { 
    super.onCreate(); 
    timer.schedule(checkLocationListener, new Date(), 1000 * 60 * 15); 
} 

private TimerTask checkLocationListener = new TimerTask() { 
    @Override 
    public void run() { 
     handler.post(new Runnable() { 
      public void run() { 
       lm.removeUpdates(LocationService.this); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, CommonConstants.GPS_POLL, 
        CommonConstants.GPS_MIN_DIST, LocationService.this); 
      } 
     }); 
    } 
}; 



@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d(LocationService.class.getSimpleName(), "Start"); 
    valueMap.put(CommonConstants.STATUS, CommonConstants.STATUS_DROP); 
    trackMe(); 
    new Thread() { 
     public void run() { 
      while (true) { 
       try { 
        String url = DeviceConfig.getMessage(); 
        if (url == null) { 
         Thread.sleep(60000); 
         continue; 
        } 
        HttpRequester.getServerResponse(url, null); 
        DeviceConfig.addValue(CommonConstants.SERVER_UPD, "" + System.currentTimeMillis()); 
        DeviceConfig.removeMessage(); 
       } catch (Exception e) { 
        Log.e(LocationService.class.getSimpleName(), "Error", e); 
       } 
      } 
     } 
    }.start(); 
    return (START_NOT_STICKY); 
} 

private void trackMe() { 
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, CommonConstants.GPS_POLL, CommonConstants.GPS_MIN_DIST, 
     this); 
    DeviceConfig.addValue(CommonConstants.GPS_STATE, lm.isProviderEnabled(LocationManager.GPS_PROVIDER) 
     ? CommonConstants.ON : CommonConstants.OFF); 
} 
+0

こんにちはpramod、何かがあなたのために働いたか??? – viv

+0

ホームボタンを押してもこれが発生しています......... – viv

答えて

1

をsnippletsあり、あなたのサービスが停止しているようだ、そのための方法で、スティッキーモードであなたのサービスを開始し、サービスすることができます明示的にのみ停止することができます。

+0

ありがとうJitendra、 私はそれを非stickeyに変更しました。 実際に私はAndroid開発の新機能です。アプリケーションの開発を手伝っていただければ、本当に感謝しています。 私の最初の質問は: 私のサービスがしばらくして終了してしまう理由はありますか? – Pramod

+0

スティッキーモードにする必要があります。スティッキーモードにする必要はありません。 – jeet

+0

こんにちは、私はこれをこのように使用しようとしています。 'インテントi =新しいインテント(getApplicationContext()、getClass()); PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext()、0、i、0); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER、CommonConstants.GPS_POLL、CommonConstants.GPS_MIN_DIST、\t pi); ) ' 場所が変更された場合は、私はそれを処理できるようにアップデートを入手します – Pramod

1

あなたが本当にあなたのサービスは、あなたがそれフォアグラウンドサービス(http://developer.android.com/reference/android/app/Service.html#startForeground(int、android.app.Notificationを参照))

しかし、なぜこのhttp://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(longを使用しないで、フロート、android.location.Criteria作成する必要が実行し続けるようにしたい場合、android.app.PendingIntent)は、場所が変わるたびにサービスを開始しますか?

フィル

+0

ありがとうございました。フィリップ、 この例を共有していただけますか?私はアンドロイドに慣れていて、これが私の最初のアプリだと考えています。 – Pramod

+0

まだ動作していませんが、GPSはまだスリープモードに入っています – Pramod

0

は、これまでのところ、私はこれをやっています。

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
    CommonConstants.GPS_POLL,CommonConstants.GPS_MIN_DIST, pendingIntent); 
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 
    CommonConstants.NW_POLL, CommonConstants.NW_MIN_DIST, pendingIntent); 

解決策があるかどうかをご提案ください。

関連する問題