여기에서 많은 질문을 읽었지만 문제가 무엇인지 알 수 없었습니다.안드로이드 안의 서비스 내 AlarmManager로주기적인 GPS 위치 업데이트
저는 Android 용 필드 서비스 응용 프로그램을 작성하고 있습니다. Activities (MyActivity.java) 중 하나에는 Start와 Stop이라는 두 개의 버튼이 있습니다.
현장 작업자가 시작 버튼을 누르면 GPS로 현재 위치를 가져 와서 적절한 시간 간격으로 서버에 보내야합니다 (기본값은 5 분, 여기서는 테스트를 위해 20 초로 설정). 고객은 직원이 트래픽에서 시간을 보내는 데 얼마나 오랜 시간이 걸린지 알기를 원하며 도시 (이스탄불)의 교통량은 엉망입니다.
내 활동에 AlarmManager가 있는데, 시작 버튼을 누르면 알람이 AlarmManager.setRepeating()
으로 설정되어 서비스 (ServiceClass.java)가 시작됩니다.
Intent intent = new Intent (MyActivity.this, ServiceClass.class);
mPendingIntent = PendingIntent.getService(MyActivity.this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mAlarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 20*1000,
mPendingIntent);
정지 버튼으로 알람을 취소합니다.
여기까지 완벽하게 작동하여 서비스가 시작됩니다. 그것의 onCreate()
, onStart()
및 onDestroy()
메소드가 실행됩니다. 그러나 나는 그 위치를 알 수 없다. DDMS를 사용하여 위치를 전송하기 위해 실제 장치에서 작업하지 않습니다. 그러나 응용 프로그램은 해당 단계를 건너 뛰고 내 위치의 경도 및 위도를 Lon : 0 Lat : 0으로 인쇄합니다.
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d("Testing", "Service got started, calling location updates:");
mLocationManager.requestSingleUpdate(mCriteria, mLocationListener,
getMainLooper());
Log.i("TESTING LOCATION UPDATE: LOCATION:", "\nLat:" + mLatitude +
" Lon:" + mLongitude);
stopSelf(startId);
Log.d("Testing", "Service Stopped!");
그리고 마지막으로, 여기 내 LocationListener의 :
mLocationProvider = mLocationManager.getBestProvider(mCriteria, true);
Log.i("BEST PROVIDER IS:", mLocationProvider);
: 나는이 코드를 실행하면
또한
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if(location != null){
mLatitude = location.getLatitude();
mLongitude = location.getLongitude();
Log.i("onLocationChanged(Location location)", "Lat:"+mLatitude + "
Lon:" + mLongitude);
}
무언가가 내 눈을 사로 잡은, 여기
서비스 내부의 코드입니다그것은 BEST PROVIDER IS : gps라고합니다. 그러나 onProviderEnabled() 내부의이 로그는 logcat에 절대로 표시되지 않습니다. 내가 사용하는 경우
@Override
public void onProviderEnabled(String s) {
Log.v("onProviderEnabled", "ENABLED");
}
두 가지가 추가 :
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
mLocationListener);
그 중 하나가 작동하지 않습니다. 문제는이 작업을 수행하기위한 좋은 방법입니다, 모든
Location lastKnown = mLocationManager.getLastKnownLocation(
LocationManager.GPS_PROVIDER);
첫째 :
이 그러나 작동하고 나는 LastKnownLocation을받을 수 있나요? 그것이 내가 무엇을 놓치고 있는지 확인하시기 바랍니다. 그렇지 않다면 어떻게 구현할 수 있습니까?
감사합니다. :)
안드로이드에서 더 나은 글쓰기 중 하나 인; http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html - 대부분의 궁금증을 해결합니다. – tonys
@tonys 고마워요, 그 첫 번째 것을 읽을 것입니다. – Lev
이것은 완벽하게 작동합니다 : [링크 설명을 입력하십시오] (http://stackoverflow.com/questions/21762293/run-gps-as-background-service-and-send-coordinates-to-web-server-php) –