android एंड्रॉइड-Google मैप्स-स्थानलिस्टर-मार्कर ऑनलाकेशन बदलना ऐप क्रैश बनाता है



google-maps geolocation (1)

ठीक है, मैंने पहले से ही इस समस्या का समाधान किया है। इसलिए मैं यहां समाधान पोस्ट करता हूं।

मैंने MapsActivity को LocationListener इंटरफ़ेस पर लागू किया है और किसी कारण से यह इस तरह से काम नहीं करता है। मैं जियोओकार्डिनेट्स को पुनः प्राप्त कर सकता हूं, लेकिन जैसे ही मैं कैमरे को स्थानांतरित करना चाहता हूं या मार्कर को जोड़ना चाहता हूं, यह ऐप दुर्घटनाग्रस्त हो जाता है क्योंकि इसे खोला जाता है।

मुझे पता नहीं क्यों, लेकिन इसके बजाय:

locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 3000, 5, यह)

मैं LocationListener के कार्यान्वयन को पूर्ववत करता हूँ और बस, की स्थिति में एक नया बनाएँ, यह ":

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, new LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {
                        posLat = location.getLatitude();
                        posLng = location.getLongitude();

                        position = new LatLng(posLat, posLng);

                        if (mPosition != null) {
                            mPosition.remove();
                        }

                        mPosition = mMap.addMarker(new MarkerOptions().position(position).title("Your position").
                                icon(BitmapDescriptorFactory.fromResource(R.drawable.location)));

                        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 11));

                    }

                    @Override
                    public void onStatusChanged(String provider, int status, Bundle extras) {

                    }

                    @Override
                    public void onProviderEnabled(String provider) {

                    }

                    @Override
                    public void onProviderDisabled(String provider) {

                    }
                }


        );

और इस तरह यह समस्या के बिना काम करता है

मुझे अपने वर्तमान स्थान को दिखाने के लिए एक मार्कर चाहिए सभी अनुमतियां आवश्यक हैं। जब मैं mMap.addMarker और mMap.moveCamera का ऐप काम कर रहा हूं और Googlemaps दिखाया जाता है। अगर मैं अपने कोड में उन दो में से एक को दो देता हूं, तो नक्शा भी खुलने से पहले ऐप क्रैश हो जाता है।

मैंने मार्कर को निकालने की कोशिश की है अगर यह शून्य नहीं है, लेकिन यह समस्या को हल नहीं करता है

क्या आपके पास कोई विचार है कि मैं ऐप कैसे काम कर सकता हूं?

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener {


private GoogleMap mMap;
private List<LatLng> fountain = null;
private LocationManager locationManager;
private double posLat;
private double posLng;

private LatLng position;
private Marker mPosition;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

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


}

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

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(48.16786112327462, 16.383984438313828);
    mPosition = mMap.addMarker(new MarkerOptions().position(sydney).title("Your Position").icon(BitmapDescriptorFactory.fromResource(R.drawable.location)));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));


}


//--------------------------------------------GPS Listener---------------------------------------
public void startGPS() {

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 5);
    }
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, this);
    onLocationChanged(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER));

}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 5: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            } else {
                getDialog2("Keine Erlaubnis für GPS").show();
            }
        }
    }
}


@Override
public void onLocationChanged(Location location) {
    posLat = location.getLatitude();
    posLng = location.getLongitude();

    position = new LatLng(posLat, posLng);

    if (mPosition != null) {
        mPosition.remove();
    }

    mPosition = mMap.addMarker(new MarkerOptions().position(position).title("Your position").
            icon(BitmapDescriptorFactory.fromResource(R.drawable.location)));
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 11));

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

// ---------------------------- हेल्पर मेथड्स ------------------ -----------------------------

public Dialog getDialog2(String string) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(string);
    builder.setPositiveButton("OK",
            new DialogInterface.OnClickListener() {
                @Override

                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
    return builder.create();
}


public Dialog getDialog(String string) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(string);
    builder.setPositiveButton("OK",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    return builder.create();
}

}





marker