Jagrit_Vishwa Ответов: 3

Добавление и сохранение маркера в Google maps android


Всем привет,

Я новичок в android, и я хочу сделать приложение, которое получает местоположение моего устройства (мобильного телефона), и на моей пользовательской карте оно должно показывать маркер (точно так же, как оно показывает мое местоположение, когда мы открываем официальную карту google), а после выхода/перезапуска приложения оно должно сохранить мой последний (посещенный) маркер местоположения на самой карте.

Я приложил свой код
Что он делает : он получит местоположение устройства(
Latitude and Longitude
) и поставьте маркер на пользовательскую карту Google.

Но
когда он не сохраняет мой маркер/местоположение на карте

Пожалуйста Помогите

Что я уже пробовал:

Мой код до сих пор в Android Studio
<pre>public class MapActivity extends AppCompatActivity implements OnMapReadyCallback {
    private static final String TAG = "MapActivity";
    private GoogleMap mMap;
    LocationManager locationManager;
    DatabaseHelper myDB;

    private FusedLocationProviderClient mFusedLocationProviderClient;
    private Boolean mLocationPermissionGranted = false;
    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
    private static final String FINE_LOCATION = android.Manifest.permission.ACCESS_FINE_LOCATION;
    private static final String COARSE_LOCATION = android.Manifest.permission.ACCESS_COARSE_LOCATION;
    private static final float DEFAULT_ZOOM = 15f;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        getLocationPermission();
    }

    private void getLocationPermission()
    {
        Log.d(TAG, "getLocationPermission: getting location permission");
        String[] permission = {android.Manifest.permission.ACCESS_FINE_LOCATION,
                android.Manifest.permission.ACCESS_COARSE_LOCATION};

        if (ContextCompat.checkSelfPermission(this.getApplicationContext(), FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            if (ContextCompat.checkSelfPermission(this.getApplicationContext(), COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                mLocationPermissionGranted = true;
                initMap();
            } else {
                ActivityCompat.requestPermissions(this, permission, LOCATION_PERMISSION_REQUEST_CODE);
            }
        } else {
            ActivityCompat.requestPermissions(this, permission, LOCATION_PERMISSION_REQUEST_CODE);
        }
    }

    private void initMap() {
        Log.d(TAG, "initMap: initilizing map");
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(MapActivity.this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        Toast.makeText(this, "Map is Ready", Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onMapReady: Map is Ready");
        mMap = googleMap;
        if (mLocationPermissionGranted) {
            getDeviceLocation();
            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) {
                return;
            }
            mMap.setMyLocationEnabled(true);
        }

    }

    private void getDeviceLocation() {
        Log.d(TAG, "getDeviceLocation: getting the device current location");
        mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
        try {
            if (mLocationPermissionGranted) {
                Task location = mFusedLocationProviderClient.getLastLocation();
                location.addOnCompleteListener(new OnCompleteListener() {
                    @Override
                    public void onComplete(@NonNull Task task) {
                        if (task.isSuccessful()) {
                            Log.d(TAG, "onComplete: Found location");
                            Location currentLocation = (Location)task.getResult();
                            if(currentLocation !=null)
                             {

                             moveCamera(new LatLng(currentLocation.getLatitude(),currentLocation.getLongitude()),
                             DEFAULT_ZOOM,"Updated");

                             }
                        }
                        else
                        {
                            Log.d(TAG, "onComplete: Current location is null");
                            Toast.makeText(MapActivity.this, " unable to get current location", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
        } catch (SecurityException e) {
            Log.e(TAG, "getDeviceLocation: SecurityException" + e.getMessage());
        }
    }

    private void moveCamera(LatLng latLng, float zoom, String title)
    {
        Log.d(TAG, "moveCamera:  Moving camera to Latitude: "+latLng.latitude + ", Longitude :"+latLng.longitude);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
        MarkerOptions options = new MarkerOptions().position(latLng).title(title);
        mMap.addMarker(options);
        HideSoftKeyboard();
    }


    private void HideSoftKeyboard()
    {
        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }
}

3 Ответов

Рейтинг:
16

Jagrit_Vishwa

вот мое решение
Класс активности


private void getLocationFromDataBase() {
       DatabaseHelper myDB = new DatabaseHelper(this);
       List<LatLng> lls = myDB.getAllLATLNG();

       for (LatLng ll : lls) {
           LatLng coordinate = new LatLng(ll.latitude, ll.longitude);
           Marker marker = mMap.addMarker(new MarkerOptions().position(coordinate).title("Marker in loop"));
           marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
           Toast.makeText(this, "lat " + String.valueOf(ll.latitude) + " ;; " + String.valueOf(ll.longitude), Toast.LENGTH_SHORT).show();

       }
   }



Вспомогательный класс базы данных

public List<LatLng> getAllLATLNG() {
        SQLiteDatabase db = this.getReadableDatabase();
        List<LatLng>  latLngList = new ArrayList<LatLng>();
        String selectQuery = "SELECT  * FROM " + TABLE_NAME +" where LATITUDE is not null";

        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst())
        {
            do
            {
                 double x,y;
                 x = Double.parseDouble(cursor.getString(4));
                 y = Double.parseDouble(cursor.getString(5));
                 LatLng ll= new LatLng(x,y);
                // Adding contact to list
                 latLngList.add(ll);
            }while(cursor.moveToNext());

        }
        return latLngList;
    }


Morgannik

Можете ли вы поделиться своим рабочим проектом? У меня такая же задача.

Рейтинг:
0

David Crow

Сохраните координаты в поле действия onStop() метод. В этой деятельности onCreate() метод, он должен проверить savedInstanceState параметр для ранее сохраненных координат.

В зависимости от дизайна вашего приложения вам, возможно, придется использовать onSaveInstanceState() и onRestoreInstanceState() вместо.


Jagrit_Vishwa

@David Crow спасибо вам за помощь ... Я внесу необходимые изменения и вернусь

Jagrit_Vishwa

@David Crow , ваше решение помогло мне и дало мне идею ... Я нашел свое решение .. Спасибо

Рейтинг:
0

shwetakakran

 To Display a map, using the Google Maps Android API you have to add fragments to your activity like this.

Add a Fragment element to your activity's layout file name isactivity_maps.xml. This element defines a SupportMapFragment to act as a container for the map and to provide access to the GoogleMap object. The will help the Android support library version of the map fragment, to ensure backward compatibility with earlier versions of the Android framework.
In activity's oncreate() method set layouts of your file. 


David Crow

- Чтобы показать карту..."

Это не проблема ОП.

Jagrit_Vishwa

@shwetakakran это не то, о чем я спрашивал