如何在 Firebase 中实时存储位置?
Posted
技术标签:
【中文标题】如何在 Firebase 中实时存储位置?【英文标题】:How to store location in Firebase in real-time? 【发布时间】:2017-06-21 08:10:35 【问题描述】:我正在使用带有 Firebase 的 android Studio。我已将我的项目链接到数据库并完成了用于登录和注册的用户界面。用户现在可以注册,我可以在 Firebase 中看到。用户登录后,他们可以看到 MapsActivity(谷歌地图,他们可以在其中跟踪自己的位置,但此位置并未存储在任何地方,我观看了有关跟踪自己位置的 YouTube 教程)
问题:我真正想要的是,当用户注册时,他们的位置也被发送到数据库中(所以每个用户都有一个名为位置的属性),这样当用户登录时,他/她自己的位置就可以被检索以跟踪位置。
基本上,Firebase 应在用户注册时存储位置,并在用户移动时不断更新。用户登录后,应检索位置(以便用户可以跟踪当前位置)。同样,当用户移动时,应更新 Firebase 中的位置。
我尝试在网上查找,但似乎找不到解决方案。
【问题讨论】:
【参考方案1】:您可以使用LocationListener。这是一个简单的例子:
LocationListener locationListener = new android.location.LocationListener()
@Override
public void onLocationChanged(Location location)
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// Push your location to FireBase
@Override
public void onStatusChanged(String s, int i, Bundle bundle)
@Override
public void onProviderEnabled(String s)
@Override
public void onProviderDisabled(String s)
;
然后你将 locationListener 传递给 LocationManager
LocationManager locationManager = (LocationManager) getActivity().getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
这将监听来自 GPRS 和 NetworkProvider 的位置变化
要将更改推送到 Firebase,您可以通过以下方式进行
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private DatabaseReference myRef = database.getReference();
当发布到数据库时,您必须唯一标识一行,就像在普通数据库中一样(即 ID、UUID),因此您必须生成一个并将其存储到您的 SharedPreferences
中。
public void postToDatabase(UserLocation location)
DatabaseReference usersRef = myRef.child(someUUID);
usersRef.setValue(location);
要监听更改,您必须实现 ValueEventListener
。一个例子,但必须适应你的需求
ValueEventListener valueEventListener = new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
for(DataSnapshot snapshot : dataSnapshot.getChildren())
UserLocation location = new UserLocation();
location.setLongitude((String) snapshot.child("longitude").getValue());
location.setLatitude((String) snapshot.child("latitute").getValue());
//Dispatch your changes in application, i.e with and EventBus
@Override
public void onCancelled(DatabaseError databaseError)
;
【讨论】:
这就是我目前正在做的事情。而且我可以追踪我自己的位置。但我想将每个用户的位置存储在数据库中并检索... 据我了解,您遇到的问题是将您的位置推送到 Firebase 实时数据库并检查更改?您是否实现了来自 Firebase 的ValueEventListener
来监听数据库更改?
我的问题是如何将位置存储到数据库中?
已编辑答案,您现在可以查看,但我认为您可以在互联网上找到大量有关此的资源。
非常感谢。我会试试这个并回复你! :)以上是关于如何在 Firebase 中实时存储位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase 中保存用户分数并在 Android Studio 中实时检索