2015-02-05 2 views
1

서비스의 동작에 대해 조금 혼란 스럽습니다. 내 장치의 위도와 경도가 변경되는 즉시 내 위치를 이메일로 보내는 서비스 클래스를 만들었습니다. 서비스는 다음과 같습니다. 내 전화 화면이 켜져 있지만 서비스 화면의 전화 화면이 새로운 위치에 대해 업데이트되지 않는 순간에 완벽하게 작동합니다. 나는 잠에서 깨우기 잠금 장치에 대한 내용을 읽었습니다. 잠자기 잠금을 어떻게 구현할 수 있는지 모르겠습니다. 내 서비스에 심지어 나는 그것이 작동 또는 내 서비스 클래스 내 서비스 클래스 코드에 내가 웨이크 잠금을 획득 할 수있는 방법 나를 인도 안되요 여부를 알 수 없습니다 :이 서비스 클래스가화면이 꺼져있을 때 서비스가 꺼져 있습니다.

public class LocationUpdater extends Service { 
private LocationManager lm; 
private LocationListener locationListener; 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
      Toast.makeText(getApplicationContext(), "Location updater started",Toast.LENGTH_LONG).show(); 
    locationListener = new MyLocationListener(); 
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,0, 
       locationListener); 
    } else { 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, 
       locationListener); 
     lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0, 0, 
       locationListener); 
    } 


    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    lm.removeUpdates(locationListener); 
    super.onDestroy(); 
} 
@Override 
public void onCreate() { 
    Toast.maketext(getApplicationContext,"Updater Serive Created",Toast.LENGTH_LONG).show; 


    } 
private class MyLocationListener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location loc) { 

     if (loc != null) { 
     String latitude=loc.getLatitude(); 
     Striing longitude=loc.getLongitude(); 
     emailMyLocation(latitude,longitude); 
     } 
     } 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
    } 
    } 

하는 loc을 업데이트 중입니다. 내 장치에 이메일을 보내주십시오. 화면이 꺼져 있어도 어떻게 작동시킬 수 있습니까?

+0

서비스가 'WAKE_LOCK' 권한을 구현하도록하십시오. –

답변

0

이 질문에 대한 답변은 다음 스레드에서 확인해야합니다 : How can I keep my Android service running when the screen is turned off?. 아마도 WakeLock이 부분적으로 필요하기 때문에 화면이 꺼져 있어도 CPU가 계속 실행됩니다. 또한 웨이크 잠금 장치의 동작을 설명하는 Android API의 PowerManager 설명서를 확인해야합니다.

지금
PowerManager.WakeLock wakeLock ; 
    PowerManager pm; 

당신이 할 수 있습니다 : 는 정적 변수

public class Globals { 
      public static PowerManager.WakeLock wakelock; 
} 

는 이제 서비스 클래스에서이 선언하라 전역 클래스를 확인하고 가동 잠금 선언

+0

예 부분적인 잠김 잠금이 필요하지만이 방법을 알지 못합니다. 이미이 스레드를 읽었습니다.이 기능을 구현하기 위해 노력했지만 효과가 없었습니다. –

0

이 같은 웨이크 잠금을 aquire 수 있습니다 wakelocks의 두 가지 기능 :

public void acquirewakeLock() { 
     if(Globals.wakelock!=null){ 
     Globals.wakelock.release(); 
     Globals.wakelock=null; 
     } 
    pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
    "TrackerService"); 
    wakeLock.acquire(); 
    Globals.wakelock=this.wakeLock; 
} 
public void releaseWakelock() { 
     wakeLock.release(); 
     } 

R에서 onCreate 방법이 함께 가동 잠금 첩 수 있습니다 : 이것은 CPU가 다른 활동 및 서비스에 의해 보유 여부에 처리됩니다 하던지 그렇지 당신이 당신의 서비스로서 클래스에 CPU를 제공 할 수있을 것입니다

@Override 
    public void onCreate() { 
     acquirewakeLock() 
    } 

. 당신이 당신의 서비스를 처리하는 데 필요한 시간을 알고있는 경우도

wakelock.acquire(time in milliseconds) 

를 사용할 수 있습니다. :)

관련 문제