Et si l'utilisateur ne peut pas être localisé, que fais-tu ?
Le cas typique est un utilisateur à l'intérieur d'un bâtiment, le GPS fonctionne peu ou mal dans ces cas-là.
De plus, tu demandes une localisation précise (ACCURACY_FINE), qui demande plus de ressources et de temps à avoir. Utilise plutôt ACCURACY_COARSE : moins précis, moins consommateur de batterie et plus rapide.
Tu as un souci d'algo aussi, c'est sans doute de là que viens ton problème.
Tu enregistres en fin de scan. Que se passe-t-il dans le cas où le scan prend moins de temps que la localisation ?
Seul truc auquel je pense : faire un INSERT partiel avec les données du scan dans un premier temps et les données de localisation en second temps (utilisation d'un service pour la localisation en arrière-plan ? tout du moins un truc désolidarisé de l'Activity).
Au pire, tu peux aussi regarder du coté de getLastKnownLocation, qui refile la dernière position enregistrée. Elle peut ne pas exister, ou être a coté de la plaque (cas d'un voyage en avion par exemple).