Моя карта 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 есть какая-то проблема или что-то в этом роде.