2014-02-07 3 views
0

안녕하세요 저는 AlarmManager를 사용하여 매 5 분마다 현재의 경도와 위도를 가져오고 공유 환경 설정에 값을 저장하는 프로그램을 작성하고 있습니다.이 검색 backgroun을 실행하려면 iam 서비스를 사용하고 싶습니다. 서비스를 중지하고 싶습니다. 배터리 drain.This을 방지하기 위해 lattitude와 경도를 가져 오는 후실행 후 서비스 중지

답변

0

사용 방송 수신기 인 사전에 나에게 감사를 도와주세요

CurrentLocation.java 내 코드

import com.google.android.gms.maps.model.LatLng; 

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.content.ServiceConnection; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.preference.PreferenceManager; 
import android.util.Log; 
import android.widget.Toast; 


public class CurrentLocation extends Service implements LocationListener { 

    private Context mcontext; 
    SharedPreferences shprefs; 


    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     this.mcontext=this; 
     getlocation(); 

    } 
    private void getlocation() { 
     // TODO Auto-generated method stub 
     Log.i("evvterer", "mnbj"); 
     LocationManager locationManager = (LocationManager) mcontext.getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); 
    } 
    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 

     return null; 
    } 
    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 
     shprefs=PreferenceManager.getDefaultSharedPreferences(CurrentLocation.this); 


     double latitude=location.getLatitude(); 
     Editor edit=shprefs.edit(); 
     edit.putString("Ltd", ""+latitude); 
     edit.commit(); 

     double longitude=location.getLongitude(); 
     Editor edits=shprefs.edit(); 
     edits.putString("Lngtd", ""+longitude); 
     edits.commit(); 
     LatLng loca=new LatLng(latitude,longitude); 

    } 
    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 
} 

입니다 서비스 요청에 따라 방송 수신자의 의도가 달라 지므로 사용자가 현재 위도와 경도를 5 분마다 가져 오기 위해 브로드 캐스트를 사용합니다. :) 브로드 캐스트 리시버에서 서비스가 수행 할 때 배터리가 많이 소모되지 않습니다.

0

null을 사용하는 경우 onBind에서 startService()를 사용하여 CurrentLocation 서비스를 시작할 수 있습니다. CurrentLocation 서비스를 끝내고 나면 간단히 stopService (Intent service)을 호출하십시오.

그러나 bindService를 사용했다면 unBindService()를 사용해야합니다.

정확한 시간에 서비스를 중지하려면 onLocationChanged() 끝에서 활동의 메소드를 호출하고 해당 메소드에서 서비스를 중지 할 수 있습니다.

또는 활동과 관련된 처리기에 메시지를 보내 서비스를 중지하십시오.

코드를 추가하여 다른 사람들이 귀하의 질문에 답변 할 수 있도록 서비스를 시작하십시오.