2017-12-27 7 views
0

私は運転手のアプリで、私はドライバーの現在の場所を取得し、ライブマーカーを入れたいと思うuberやgrap車のようなマップを実装したいと思います私は準備ができて私は私がonLocationChangedを使用することができることを理解している、私は明確なチュートリアルとそれを行う方法を見つけることができない、私はどこに住んでいるすべてのドライバを見ることができるアプリを開くときに、ユーザーの側から、私はこれらの場所を呼び出し、私は、これはそれが店舗の場所は地図のようにUBER

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 

    } 

} 
+0

[こちら](https://stackoverflow.com/questions/47054752/locationmanager-requestlocationupdates-mintime-or-mindistance/47054953#47054953)をチェックしてください –

答えて

0

okがいくつかの研究を行った後、私は、それを行うのは簡単だったが分かったとにかく誰かが

1それを必要とする場合にはANSを掲載しています:プロバイダ側では、これまでの位置の変更は、我々はリアルタイムデータベース

にそれを送信するとき
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) { 

        } 
       }); 

それを参照するには

1

あなたが使用することができます行うには正しい方法であるとは考えていないこれらの場所でマップにマーカーを追加し、ユーザーのアプリで、データベースへのドライバの場所を送っておく意味要求の場所の更新のためのlocationManager.requestLocationUpdates(provider, 400, 1, this);onLocationChanged(Location location)では地図上にドライバの位置を表示することができます。ピンを入れる前に地図をクリアしていることを確認してください(つまり、map.clear()

+0

フルコードplzを表示できます –

+0

@LimCho:このリンクを参照してください:ロケーションマネージャとマイナーな変更が必要な場合は[https://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/] –

1

貧弱な方法と思われるので、速度が速くなる可能性があります。 XMPP Serviceを実装して、継続的にライブロケーションを送信できます。 B'cosより速い方法で達成し、より少ない労力を必要としているようです。

プッシュ(緯度が長い)onLocationChanged()を送信できます。また、他のサイドサービスはダイバーから送信されたプッシュを自動的に検出します。

アプリでXMPPサービスを実装できます。

+0

私はfirebaseリアルタイムデータベースを使用してデータを送信できますそれを元に戻すこともできますが、それでもまだわかりませんチュートリアル –

+0

これを試してみましたか:https://www.androidhive.info/2016/10/android-working-with-firebase-realtime-database/ – Dhruv

関連する問題