2017-08-28 9 views
-1

Googleマップのアクティビティを含むアプリで作業しています。Googleマップのアクティビティに移動しません。常に現在の場所に戻ります

私の問題は、次のとおりです。 私はそれがすぐに私の現在の位置に戻り外にマップ内を移動または&ズームインしようとしています。また、私が場所を検索すると、新しいマーカーが検索された場所に追加されましたが、ただちに現在の場所に戻ります。

私は誰かが

をそれを把握することができます。これは私のGoogleマップの活動であると思います ...解決策を探したが、何も見つかりませんでした。私は

私は思う:

public class MapActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 
    public LocationManager locationManager; 
    public LocationListener locationListener; 
    public DatabaseReference mDatabase; 
    private FirebaseAuth mAuth; 
    private ArrayList<User> userArrayList = new ArrayList<>(); 
    User useri; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     if (requestCode == 1) { 

      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
        { 
         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
        } 
       } 
      } 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_map); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(map); 
     mapFragment.getMapAsync(this); 
     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     mAuth = FirebaseAuth.getInstance(); 

    } 

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

     locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

     locationListener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 

       LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude()); 

       mMap.addMarker(new MarkerOptions().position(userLocation).title("המיקום שלי") 
         .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_marker1))); 
       mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 11)); 

      } 

      @Override 
      public void onStatusChanged(String s, int i, Bundle bundle) { 

      } 

      @Override 
      public void onProviderEnabled(String s) { 

      } 

      @Override 
      public void onProviderDisabled(String s) { 

      } 
     }; 

     if (Build.VERSION.SDK_INT < 23) { 

      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
      mMap.setMyLocationEnabled(true); 

     } else { 

      if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

       ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); 

      } 
      else { 

       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
       //mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
       //MapStyleOptions style = MapStyleOptions.loadRawResourceStyle(this, R.raw.style); 
       //mMap.setMapStyle(style); 
       mMap.setMyLocationEnabled(true); 
       final Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); 
       final LatLng userLocation = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); 
       mDatabase.child("Users").child(mAuth.getCurrentUser().getUid()).child("lat").setValue(lastKnownLocation.getLatitude()); 
       mDatabase.child("Users").child(mAuth.getCurrentUser().getUid()).child("lng").setValue(lastKnownLocation.getLongitude()); 
       mMap.clear(); 
       mMap.addMarker(new MarkerOptions().position(userLocation).title("המיקום שלי") 
         .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_marker1))); 
       mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 11)); 

       showUsersOnMap(); 

      } 
     } 
    } 


    // Search for location and show it on the map 
    public void onClick(View view) { 

     if(view.getId() == R.id.searchLocationBtn){ 
      EditText searchBoxLocation = (EditText) findViewById(R.id.searchBoxLocation); 
      String location = searchBoxLocation.getText().toString(); 
      List<Address> addressList = null; 
      MarkerOptions markerOptions = new MarkerOptions(); 
      if(! location.equals("")){ 
       Geocoder geocoder = new Geocoder(this); 
       try { 
        addressList = geocoder.getFromLocationName(location, 1); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       for (int i = 0 ; i < addressList.size(); i++){ 
        Address myAddress = addressList.get(i); 
        LatLng latLng = new LatLng(myAddress.getLatitude(), myAddress.getLongitude()); 
        markerOptions.position(latLng); 
        mMap.clear(); 
        mMap.addMarker(markerOptions); 
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11)); 
       } 
      } 
     } 
    } 

    // Function to show all the users on the map 
    public void showUsersOnMap(){ 
     mDatabase.child("Users").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot ds: dataSnapshot.getChildren()){ 
        User user = ds.getValue(User.class); 
        userArrayList.add(user); 
       } 

       for (int i = 0; i < userArrayList.size(); i++) { 
        useri = userArrayList.get(i); 
        if (useri.getLat() != 0 && useri.getLng() != 0) { 
         MarkerOptions markerOptions = new MarkerOptions(); 
         LatLng userlatLng = new LatLng(useri.getLat(), useri.getLng()); 
         markerOptions.position(userlatLng); 
         mMap.addMarker(new MarkerOptions().position(userlatLng).title(useri.getName()).snippet(useri.getPhone()) 
           .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_marker2))); 
         //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng2,10)); 

        } 
        else Toast.makeText(getApplicationContext(),"ישנה בעיה. אנא נסה להתחבר למפה שוב",Toast.LENGTH_LONG).show(); 
       } 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 
} 

UPDATE問題が何かを発見した。 私はmMap.moveCamera()をonLocationChanged()内で無効にしました。

今、私はそのようにすることが大丈夫ですか?私はドライブの場合、まだ私の現在の場所にカメラを保つ?あなたがループの同じコードで

for (int i = 0 ; i < addressList.size(); i++){ 
        Address myAddress = addressList.get(i); 
        LatLng latLng = new LatLng(myAddress.getLatitude(), myAddress.getLongitude()); 
        markerOptions.position(latLng); 
        mMap.clear(); 
        mMap.addMarker(markerOptions); 
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11)); 
       } 

に毎回マーカーを追加している検索コードで

答えて

0

、新しいマーカーを追加する特定の場所mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11))

mMap.addMarker()にカメラを移動しています地図。

mMap.moveCamera()は、指定された場所にフォーカスを移動します。

実装を確認してください。

希望します。

+0

問題が見つかりました。更新された質問をご覧ください – Nauruto

関連する問題