Я хочу отобразить отображение карт 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>
У меня также был проект, делающий такой же результат. Я так с этим справляюсь.
Итак, сначала вам нужно инициализировать карту
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);
Надеюсь это поможет
Используйте эту ссылку демонстрационного действия, чтобы показать использование getSupportFragmentManager, которое предназначено для использования с AppCompatActivity: github.com/codepath/android-google-maps-demo/blob/master/app /…