Member 12288686 Ответов: 0

Моя карта Google не работает после того, как пользователь включает GPS и возобновляет работу приложения


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

Я хочу запустить это приложение в портретном режиме, поэтому опция встряхивания будет не очень полезна.Так что кто-нибудь может помочь мне с кодом и сказать, где я ошибаюсь. Я пробовал различные ссылки и методы в onResume, onRestart, но ничего не помогало.

Вот мой код, я вызываю эту функцию setupmapifneeded в onCreate, onResume и onRestart, но ничего полезного.

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the map.

    if (mapFragment == null) {
        // Try to obtain the map from the SupportMapFragment.

        mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mMap = googleMap;

                if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }
                mMap.setMyLocationEnabled(true);


                // creating GPS Class object

                gps = new GPSTracker(MainActivity.this);

                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(gps.getLatitude(), gps.getLongitude()), 15.0f));



                googleMap.addMarker(new MarkerOptions()
                        .position(new LatLng(26.89209, 75.82759))
                        .title("FUN N FOOD"));

                // check if GPS location can get
                if (gps.canGetLocation()) {
                    Log.d("Your Location", "latitude:" + gps.getLatitude() + ", longitude: " + gps.getLongitude());
                    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(gps.getLatitude(), gps.getLongitude()), 15.0f));
                } else {


                    gpsDialog = new MaterialDialog.Builder(MainActivity.this)
                            .titleColor(getResources().getColor(R.color.grey))
                            .title("GPS Settings")
                            .content("GPS is not enabled. Do you want to go to settings menu?")
                            .positiveText("Settings")
                            .negativeText("Cancel")
                            .positiveColorRes(R.color.grey)
                            .negativeColorRes(R.color.grey)
                            .onPositive(new MaterialDialog.SingleButtonCallback() {
                                @Override
                                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                    startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                                    gpsDialog.dismiss();
                                }
                            })
                            .onNegative(new MaterialDialog.SingleButtonCallback() {
                                @Override
                                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                    gpsDialog.dismiss();
                                }
                            })
                            .show();
                    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(gps.getLatitude(), gps.getLongitude()), 14.0f));

                }
            }
        });

    }
}


вот моя деятельность.

<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


а вот и другие мои методы

@Override
public void onPause() {

    if (mAdView != null) {
        mAdView.pause();
    }
    super.onPause();

}

@Override
public void onResume() {


    super.onResume();

    if (mAdView != null) {
        mAdView.resume();
    }

    if (mapFragment == null) {
        setUpMapIfNeeded();
    }

}

@Override
protected void onRestart() {
    super.onRestart();

    if (mapFragment == null) {
        setUpMapIfNeeded();
    }
}

@Override
public void onDestroy() {
    if (mAdView != null) {
        mAdView.destroy();
    }
    super.onDestroy();
}


Может ли кто-нибудь что-нибудь предложить?.. заранее спасибо

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

http://stackoverflow.com/questions/34506762/google-map-is-not-animating-to-current-location-on-resuming

http://stackoverflow.com/questions/13739990/map-view-following-user-mylocationoverlay-type-functionality-for-android-maps/13753518#13753518

Richard MacCutchan

Где находится код, который вызывается из OnResume?

Member 12288686

его просто там setUpMapIfNeeded();

частная пустота setUpMapIfNeeded() {
// Выполните нулевую проверку, чтобы подтвердить, что мы еще не создали экземпляр карты.

if (mapFragment = = null) {
// Попробуйте получить карту из SupportMapFragment.

mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(Р. ИД.карте);
mapFragment.getMapAsync(новый OnMapReadyCallback() {
@Ручная коррекция
общественного недействительными onMapReady(расчет проезде) {
вызов mmap = проезде;

if (ActivityCompat.checkSelfPermission(MainActivity. this, android.Манифест.разрешение.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED & & amp; ActivityCompat.checkSelfPermission(MainActivity.this, android.Манифест.разрешение.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
вернуть;
}
вызов mmap.setMyLocationEnabled(правда);


// создание объекта класса GPS

gps = новый GPSTracker(MainActivity. this);

вызов mmap.animateCamera(CameraUpdateFactory.newLatLngZoom(новый latlng С(по GPS.getLatitude(), с GPS.getLongitude()), 15.0 Ф));



googleMap. addMarker(new MarkerOptions()
. позиция (new LatLng(26.89209, 75.82759))
.название("удовольствие еда"));

// проверьте, может ли GPS-местоположение получить
если (по GPS.canGetLocation()) {
Войти.д("ваше местоположение", "широта:" + GPS-навигатор.getLatitude () + ", "долгота": "+ GPS-навигатор.getLongitude());
вызов mmap.animateCamera(CameraUpdateFactory.newLatLngZoom(новый latlng С(по GPS.getLatitude(), с GPS.getLongitude()), 15.0 Ф));
} еще {


gpsDialog = новый MaterialDialog.Строитель(В MainActivity.это)
.titleColor(getResources (). getColor(R. color. grey))
. заголовок ("настройки GPS")
. content ("GPS не включен. Вы хотите перейти в меню настроек?")
. positiveText ("настройки")
. negativeText ("отмена")
.positiveColorRes(цвет Р..серый)
.negativeColorRes(цвет Р..серый)
.onPositive(новый MaterialDialog.SingleButtonCallback() {
@Ручная коррекция
public void onClick (@NonNull MaterialDialog dialog, @NonNull DialogAction, который) {
startActivity (новое намерение (android. provider.Настройки.ACTION_LOCATION_SOURCE_SETTINGS));
gpsDialog.уволить();
}
})
. оннегатив(новый Материалдиалог.SingleButtonCallback() {
@Ручная коррекция
public void onClick (@NonNull MaterialDialog dialog, @NonNull DialogAction, который) {
gpsDialog.уволить();
}
})
.показывать();
вызов mmap.animateCamera(CameraUpdateFactory.newLatLngZoom(новый latlng С(по GPS.getLatitude(), с GPS.getLongitude()), 14.0 Ф));

}
}
});

}
}

Richard MacCutchan

Но вы только это называете if (mapFragment == null) Не должна ли эта переменная иметь какую-то ссылку на возобновление деятельности? Посмотреть пояснения в https://developer.android.com/training/basics/activity-lifecycle/pausing.html.

ridoy

Вы пробовали перезагрузить устройство? Наиболее вероятная причина заключается в том, что ваш код не может извлечь местоположение пользователя из gps. Есть и некоторые другие причины, обновление местоположения с gps часто требует немного времени в зависимости от положения пользователя.

Member 12288686

Сэр, gps работает нормально, когда я запускаю приложение во второй раз. Просто когда в самый первый раз и он просит включить местоположение, и когда я нажимаю назад из настроек gps, чтобы перейти в приложение, приложение фокусируется где-то в океане, и когда я уничтожаю активность и запускаю снова, оно работает очень хорошо.
Я думаю, что в моем onResume есть какая-то проблема или что-то в этом роде.

0 Ответов