사용자가 & 오프 위치 추적을 설정 할 수있는 응용 프로그램을 빌드하려면 내 목표중포 기지의 onComplete은 백그라운드 프로세스
에 호출되지 않습니다. 추적 기능이 켜지면 사용자의 위치 데이터를 Firebase에 전송하려고합니다.
나의 시도 솔루션
내가 PendingIntent 및 Google 백그라운드에서 위치를 추적하는 서비스 FusedLocationAPI 재생 사용합니다. 모든 위치 업데이트 (30 초 구두 점)에서 PendingIntent는 WakefulBroadcastReceiver에 인 텐트 (가능한 경우 위치 업데이트가 있음)를 발동합니다. WakefulBroadcastReceiver는 위치 데이터를 Firebase에 저장해야합니다. 여기
는 WakefulBroadcastReceiver의 모습입니다 : (! 일부 장치에) 일부 휴대 전화에
public class LocationProcessingReceiver extends WakefulBroadcastReceiver {
private static final String TAG = "LocationProcessingRcv";
@Override
public void onReceive(Context context, Intent intent) {
if (LocationResult.hasResult(intent)) {
Log.i(this.TAG, "Received location result");
// Extract location from result and push to server
Location location = LocationResult.extractResult(intent).getLastLocation();
this.pushLocationToServer(location, intent.getStringExtra("userId"));
}
else {
Log.i(TAG, "No location result");
}
}
/**
* Pushes location to Firebase server
* @param location
*/
private void pushLocationToServer(Location location, String userId) {
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
// Data to update the latest status of the user
Map<String, Object> statusMap = new HashMap<String, Object>();
// ... various statusMap.put(...) calls go here
// Get reference to Firebase as well as key at which to update reference
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference();
dbRef.child(DB_LOC_HISTORY_REFERENCE).push().updateChildren(historyMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError == null) {
Log.i(TAG, "Successfully pushed to server");
}
else {
Log.i(TAG, "Server push failed: " + databaseError.toString());
}
}
});
}
}
문제
의의 onComplete 콜백이 호출되지 않습니다. 왜 이것이 작동하지 않는지도 모르겠다 ... 어떤 장치에서는 콜백이 예상대로 작동한다. 다른 사람들에게는 콜백이 수신되지 않으며 Firebase에서 업데이트 된 데이터를 보지 못합니다.
로그는 위치 업데이트가 정상적으로 작동하고 WakefulBroadcastReceiver의 onReceive() 메소드가 예상대로 주기적으로 호출됨을 보여줍니다.
나는 oncomplete가 호출 될 것으로 예상했지만, 연결 문제가있을 경우 오류를 표시합니다. 그러나 그것은 결코 일어나지 않으며, 나는 왜 이해해야하는지 고심하고 있습니다.
경고 : 이러한 장치 중 많은 장치가 3G에서 실행됩니다. 내 앱이 배경에있을 때 Firebase가 3G 연결이 너무 느리기 때문에 일을 끝내기 전에 BroadcastReceiver가 죽을 수 있습니까?
해결 방법을 찾으셨습니까? – andygeers