2013-04-11 2 views
2

위치 수신기를 구현하는 서비스가 있습니다. 이제 내 질문은 내 서비스가 절전 모드에서도 위치를 캡처하는지 확인하는 방법입니다. 알람 관리자에 대해 읽었습니다.슬립 모드에서도 서비스를 실행하려면?

alarm.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, operation); 

그러나 사용 방법은 이미 알고 있습니다. 여기에 내 코드가 어떤 도움을 주시면 감사하겠습니다 ..입니다 ..
내 서비스

public class LocationCaptureService extends Service implements LocationListener { 
public static int inteval; 
java.sql.Timestamp createdTime; 
LocationManager LocationMngr; 

@Override 
public void onCreate() { 
    inteval=10*1000; 

    startLocationListener(inteval); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

private void startLocationListener(int inteval,String nwProvider) { 
    this.LocationMngr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);   
     this.LocationMngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, inteval, 0, this); 
} 

public void onLocationChanged(Location location) { 
    String status="c",S=null; 
    double longitude,lattitude,altitude; 
    g_currentBestLocation = location; 
    createdTime = new Timestamp (new java.util.Date().getTime());  
     longitude=location.getLongitude(); 
     lattitude=location.getLatitude(); 
     altitude=location.getAltitude(); 
     //use this 
     } 
    }        
    public void onProviderDisabled(String provider) {}        
    public void onProviderEnabled(String provider) {}        
    public void onStatusChanged(String provider, int status, Bundle extras) {} 

}

+0

위치를 쿼리하기 위해 특정 간격을 예약 할 필요가 없다면 나는'AlarmManager'을 사용하고 싶지 않습니다. a) 앱이 완료 될 때까지 서비스가 종료되지 않게하려면 b) 사용자가 앱에 중지를 지시하면 다른 방법이 필요합니다. 덧글에 대한 –

+0

고맙습니다 .. 제발 내 애플 리케이션이 완료 될 때까지 살해 서비스를 만드는 방법을 말해주십시오. start_sticky를 반환해야합니까 –

답변

3

당신이 당신의 서비스가 당신이 그것을 내리는 데 필요한 OS 회수/살해되지 않도록하려면 전경 서비스. 기본적으로 모든 서비스는 배경입니다. 즉, OS가 자원을 필요로 할 때 서비스가 중단됩니다. 자세한 내용은 다음을 참조하십시오 doc

기본적으로 서비스에 대해 Notification을 만들고 전경임을 표시해야합니다. 이렇게하면 사용자가 앱이 실행 중임을 알 수 있도록 영구 알림이 표시되고 OS가 서비스를 중지하지 않습니다.

Intent intent = new Intent(this, typeof(SomeActivityInYourApp)); 
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 

builder.setSmallIcon(Resource.Drawable.my_icon); 
builder.setTicker("App info string"); 
builder.setContentIntent(pi); 
builder.setOngoing(true); 
builder.setOnlyAlertOnce(true); 

Notification notification = builder.build(); 

// optionally set a custom view 

startForeground(SERVICE_NOTIFICATION_ID, notification); 

는 위의 예에서 기초하고 취소하는 코드를 포함하지 않음을 유의하시기 바랍니다 : 여기에

알림 (서비스에서이 작업을 수행)를 만들고 전경 만드는 방법의 간단한 예입니다 알림, 다른 것들 사이에. 또한 앱에 더 이상 서비스가 필요하지 않은 경우 stopForeground으로 전화해서 알림을 제거하고 서비스가 종료되도록해야합니다. 그렇게하지 않으면 리소스가 낭비됩니다.

+0

나는 Huawei U8860에서이 접근법을 시도했으며 장치가 절전 모드 (화면이 꺼져 있고 장치가 잠겨 있음)에있는 동안 서비스가 작동하지 않습니다. 이 문제는이 Huawei U8860에만 존재합니다. HTC ONE X, S3, Experia T, S2에서 시도해 보았습니다. 이것이 왜이 장치로 작동하지 않는지에 대한 아이디어가 있습니까 ?? 덕분에 – Houcine

+0

1 년 후, 그리고 나는 결코 생각보다 나은이 의견에 회신을 보내고 있습니다. 서비스가 계속 실행 되려면 WakeLock을 가지고 있어야 할 수도 있습니다. 자세한 내용은 https://developer.android.com/reference/android/os/PowerManager.WakeLock.html을 참조하십시오. –

+1

년 및 일 : D. – Houcine

관련 문제