OnMapReady метод не применяется к Google Maps Display

Я хочу отобразить отображение карт Google на макете фрагмента в студии Android. Я уже загрузил сервисы Google Play в SDK и внес соответствующие изменения в свои файлы gradle (я думаю). Я также внес некоторые изменения в файл манифеста Android, чтобы предоставить пользователю разрешения и т. д. Во время выполнения отображение карт Google отображается, но lng и lat установлены на 0, поэтому, когда отображается карта, он показывает мне область вокруг Африки. Я создал методы в java-файле, такие как onMapReady, который должен отображать карту в другом месте и увеличивать ее масштаб. Функция onMapReady вызывает другой метод, называемый goToLocationZoom, который содержит необходимые функции, позволяющие перемещать карту. в это место, но по какой-то причине каждый раз, когда я его запускаю, он всегда остается в районе Африки, даже если я изменил значения lng и lat. Я следую руководству по достижению этого, и в файле Activty_home.XML у них есть линейный макет, в то время как мой установлен на ограничение, но я не думаю, что это вызовет проблему. Кто-нибудь знает, как отобразить карту для значений lng и lat, которые я указал в файле java?

Ниже приведен код моего файла Java:

com.example.cmpkbest.lifestylefitnessapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;

public class ViewLifestyles extends AppCompatActivity implements 

    GoogleMap mGoogleMap;

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

    private void initMap () {
        MapFragment mapFragment = (MapFragment) getFragmentManager ().findFragmentById(R.id.mapFragment);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        goToLocationZoom (53.408743, -2.984154, 15);
    }

    private void goToLocation (double lat, double lng) {
        LatLng ll = new LatLng(lat, lng);
        CameraUpdate update = CameraUpdateFactory.newLatLng(ll);
        mGoogleMap.moveCamera(update);
    }

    private void goToLocationZoom (double lat, double lng, float zoom) {
        LatLng ll = new LatLng(lat, lng);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom);
        mGoogleMap.moveCamera(update);
    }

}

Ниже мой код манифеста:

        <?xml version = "1.0" encoding = "utf-8"?>
    <manifest xmlns:android = "http://schemas.android.com/apk/res/android"
        package = "com.example.cmpkbest.lifestylefitnessapp">

        <uses-permission android:name = "android.permission.INTERNET" />
        <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />

        <permission android:name = "com.example.cmpkbest.lifestylefitnessapp.permission.MAPS_RECIEVE"
                    android:protectionLevel = "signature" />

        <uses-permission android:name = "com.example.cmpkbest.lifestylefitnessapp.permission.MAPS_RECIEVE" />
        <uses-permission android:name = "com.google.android.providers.gsf.permissions.READ_GSERVICES" />

        <uses-feature android:glEsVersion = "0x00020000"
            android:required = "true" />


        <application
            android:allowBackup = "true"
            android:icon = "@mipmap/ic_launcher"
            android:label = "@string/app_name"
            android:roundIcon = "@mipmap/ic_launcher_round"
            android:supportsRtl = "true"
            android:theme = "@style/AppTheme" >
            <activity android:name = ".RegistrationPage">
                <intent-filter>
                    <action android:name = "android.intent.action.MAIN" />

                    <category android:name = "android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name = ".Login" />
            <activity android:name = ".Home" />
            <activity android:name = ".ViewLifestyles" />
            <activity android:name = ".Workouts" />
            <activity android:name = ".Notemaker"></activity>

            <meta-data android:name = "com.google.android.maps.v2.API_KEY"
                android:value = "AIzaSyAkAQlA2B8_E5pPNH_jdAWSJpf915uozi8 " />

            <meta-data android:name = "com.google.android.gms.version"
                android:value = "@integer/google_play_services_version" />

        </application>

    </manifest>

Ниже мои файлы Gradle:

apply plugin: 'com.android.application'

repositories {
    maven {
        url 'https://maven.google.com'
    }
}

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.example.cmpkbest.lifestylefitnessapp"
        minSdkVersion 23
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:+'
    testCompile 'junit:junit:4.12'
    compile 'com.google.android.gms:play-services-maps:11.0.4'
}

Наконец, мой файл Layout.XML

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:background = "@drawable/bg5"
    tools:context = "com.example.cmpkbest.lifestylefitnessapp.ViewLifestyles"
    tools:layout_editor_absoluteY = "81dp"
    tools:layout_editor_absoluteX = "0dp">

    <fragment
        android:id = "@+id/mapFragment"
        android:name = "com.google.android.gms.maps.MapFragment"
        android:layout_width = "346dp"
        android:layout_height = "212dp"
        app:layout_constraintBottom_toBottomOf = "parent"
        android:layout_marginBottom = "8dp"
        app:layout_constraintTop_toTopOf = "parent"
        android:layout_marginTop = "8dp"
        android:layout_marginRight = "8dp"
        app:layout_constraintRight_toRightOf = "parent"
        android:layout_marginLeft = "8dp"
        app:layout_constraintLeft_toLeftOf = "parent"
        app:layout_constraintVertical_bias = "0.084" />
</android.support.constraint.ConstraintLayout>

Используйте эту ссылку демонстрационного действия, чтобы показать использование getSupportFragmentManager, которое предназначено для использования с AppCompatActivity: github.com/codepath/android-google-maps-demo/blob/master/app‌ /…

Andy 21.03.2018 15:34
0
1
858
1

Ответы 1

У меня также был проект, делающий такой же результат. Я так с этим справляюсь.

Итак, сначала вам нужно инициализировать карту

if (mMap == null) {
        mMap = ((MapFragment) getFragmentManager().findFragmentById(
                R.id.map)).getMap();

        // check if map is created successfully or not
        if (mMap == null) {
            Toast.makeText(getApplicationContext(),
                    "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                    .show();
        }
}

Затем я вызываю setUpMap сразу после его инициализации, не полагаясь на onMapReady

mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
            lastLocation.getLatitude(), lastLocation.getLongitude()), 15));

mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.setIndoorEnabled(true);
mMap.setMyLocationEnabled(true);

Надеюсь это поможет

Другие вопросы по теме