【问题标题】:shop car location in map live like UBER像 UBER 一样在地图上购买汽车位置
【发布时间】:2017-12-27 04:21:51
【问题描述】:

我想实现像 uber 或 Grap 汽车这样的地图,其中会有司机和用户,在司机应用程序中我想获取司机的当前位置并在地图中放置一个实时标记,当司机移动时移动,从用户端打开应用程序时,他可以看到所有正在运行的驱动程序,我找不到清晰的教程以及如何做到这一点,因为我准备好了,我知道我可以使用 onLocationChanged 这意味着我一直将驱动程序位置发送到数据库然后在用户应用程序中我调用这些位置并将标记添加到带有这些位置的地图我不相信这是正确的方法

class LocationUpdateListener implements LocationListener{

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

        // update your marker here
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

}

【问题讨论】:

标签: android


【解决方案1】:

您可以使用locationManager.requestLocationUpdates(provider, 400, 1, this); 请求位置更新,在onLocationChanged(Location location) 中您可以在地图上显示司机位置。在放置图钉之前确保您是清晰的地图(即map.clear()

【讨论】:

【解决方案2】:

正如您认为的那样不好,它可以更快。您可以实现XMPP Service 以连续发送实时位置。因为这似乎是更快的实现方式并且需要更少的努力。

您可以发送推送(带经纬度)onLocationChanged(),对方服务会自动检测到来自潜水员的推送。

This way你可以在app中实现XMPP服务。

【讨论】:

  • 我发现我可以使用firebase实时数据库将数据发送给它并从中取回,但我仍然找不到清晰的教程
  • 你试过这个吗:androidhive.info/2016/10/…
【解决方案3】:

好吧,在做了一些研究后,我发现这很容易做到,无论如何我都会发布 ans 以防有人需要它

1 : 在提供商端,当位置发生变化时,我们将其发送到实时数据库

googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
            @Override
            public void onMyLocationChange(Location location) {



                    latitudeLocation = location.getLatitude();
                    longitudeLocation = location.getLongitude();

                    LatLng p1 = new LatLng(latitudeLocation, longitudeLocation);

                    mMap.clear();

                    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(p1, 16));
                    database = FirebaseDatabase.getInstance();
                    myRef = database.getReference("Location");
                    myRef.setValue(latitudeLocation+","+longitudeLocation);


    }

        });

2:在用户端在地图上看到它

 @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        if (ContextCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            mMap.setMyLocationEnabled(true);
        } else {
            if (ContextCompat.checkSelfPermission(getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                mMap.setMyLocationEnabled(true);

            } else {
            }
        }

 mMap.getUiSettings().setCompassEnabled(false);
        mMap.getUiSettings().setIndoorLevelPickerEnabled(false);
        mMap.getUiSettings().setMapToolbarEnabled(false);
        mMap.getUiSettings().setRotateGesturesEnabled(false);
        mMap.getUiSettings().setZoomControlsEnabled(false);



        LatLng p1 = new LatLng(latitudeLocation, longitudeLocation);

        mylocation =  mMap.addMarker(new MarkerOptions().position(p1).icon(BitmapDescriptorFactory.fromResource(R.drawable.track_order_d)));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(p1, 16)); // 16 for the Zoom

        database = FirebaseDatabase.getInstance();
        myRef = database.getReference("Location");

        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                value = dataSnapshot.getValue(String.class);
                String [] separated = value.split(",");
                String latPos = separated[0].trim();
                String longiPos = separated[1].trim();

                Double dlat = Double.parseDouble(latPos);
                Double dlong = Double.parseDouble(longiPos);
                drivers = new LatLng(dlat,dlong);
                mMap.clear();
                mMap.addMarker(new MarkerOptions().position(drivers).icon(BitmapDescriptorFactory.fromResource(R.drawable.collection_d)));

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });










                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

感谢所有尝试提供帮助的人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2013-08-25
    • 2013-03-29
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多