2017-10-06 4 views
0

J'essaie d'ajouter le support google maps à mon application Android. Au fur et à mesure que je crée une mise en page d'application complète dans le code, je voudrais aussi créer l'objet carte dans le code. C'est une classe qui devrait gérer la fonction de rappel OnMapReady.Google Maps non créé, la fonction de rappel ne fonctionne jamais

public class MapReader : Java.Lang.Object, IOnMapReadyCallback 
{ 
    private LayoutBuilder layoutBuilder; 
    public MapReader(LayoutBuilder lb) 
    { 
     layoutBuilder = lb; 
    } 
    public void OnMapReady(GoogleMap googleMap) 
    { 
     layoutBuilder.OnMapLoaded(googleMap); 
    } 
} 

Ceci est une partie critique du code créant la mise en page.

MapView mapView=new MapView(context); 
mapView.LayoutParameters = layoutParams; 
linearLayout.AddView(mapView); 

mapReader = new MapReader(this); 
mapView.GetMapAsync(mapReader); 

Le problème est que je n'obtiens aucune erreur/exception. La fonction OnMapReady n'est jamais appelée et l'écran est simplement vide. Qu'est-ce qui ne va pas ou comment puis-je obtenir des informations supplémentaires sur un tel comportement? J'ai essayé de suivre les étapes de cette video. Dans la fenêtre de sortie j'ai essayé de trouver des lignes qui pourraient aider:

Loaded assembly: /storage/emulated/0/Android/data/AlienChessAndroid.AlienChessAndroid/files/.__override__/Xamarin.GooglePlayServices.Base.dll [External] 
Loaded assembly: /storage/emulated/0/Android/data/AlienChessAndroid.AlienChessAndroid/files/.__override__/Xamarin.GooglePlayServices.Basement.dll [External] 
Loaded assembly: /storage/emulated/0/Android/data/AlienChessAndroid.AlienChessAndroid/files/.__override__/Xamarin.GooglePlayServices.Maps.dll [External] 

Il y a quelques lignes dans la fenêtre de sortie qui ne semblent pas bonnes mais exécute l'application.

AOT module 'Mono.Android.dll.so' not found: dlopen failed: library "/data/app/AlienChessAndroid.AlienChessAndroid-1/lib/arm/libaot-Mono.Android.dll.so" not found 
AOT module '/storage/emulated/0/Android/data/AlienChessAndroid.AlienChessAndroid/files/.__override__/Xamarin.Android.Support.v4.dll.so' not found: dlopen failed: library "/data/app/AlienChessAndroid.AlienChessAndroid-1/lib/arm/libaot-Xamarin.Android.Support.v4.dll.so" not found 
AOT module '/Users/builder/data/lanes/4009/3a62f1ea/source/monodroid/builds/install/mono-armv7/lib/mono/aot-cache/arm/Xamarin.Android.Support.v4.dll.so' not found: dlopen failed: library "/data/app/AlienChessAndroid.AlienChessAndroid-1/lib/arm/libaot-Xamarin.Android.Support.v4.dll.so" not found 

Ceci est mon fichier manifeste

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="AlienChessAndroid.AlienChessAndroid" android:versionCode="1" android:versionName="1.0" android:installLocation="preferExternal"> 
<uses-sdk android:minSdkVersion="22" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<application android:label="Alien Chess" android:icon="@drawable/Alien" android:largeHeap="true"> 
    <meta-data android:name="com.google.android.gms.version" android:value="2" /> 
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyAmxxxxxxxxxxxxxxxxxxxxxxxxx" /> 
</application> 

MISE À JOUR:

J'ai ajouté la vérification de la disponibilité des services Google comme le montre here et il retourne ConnectionResult.Success.

GoogleApiAvailability gaa=GoogleApiAvailability.Instance; 
int resultCode=gaa.IsGooglePlayServicesAvailable(context); 
if (resultCode ==ConnectionResult.Success) 
{ 
    ... 
} 

Après avoir lu this question j'ai changé la ligne

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

pour

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

Rien n'a changé.

+0

Veuillez vous assurer que votre «Google Play Services» est disponible, sinon, il affichera un écran vide. –

+0

@ YorkShen-MSFT J'ai mis à jour le poste et il semble que les services sont disponibles. – hoacin

Répondre

1

En essayant de créer LinearLayout et MapView dans votre layout axml (si vous le pouvez) pour être sûr que c'est comme il se doit, obtenir la carte quand il est temps d'appeler GetMapAsync en utilisant FindViewById<MapView> sur son ID de ressource.

La configuration de la carte et l'appel de GetMapAsync doivent être effectués à l'intérieur de OnStart et OnResume.

Après avoir créé votre IOnMapReadyCallback vous pouvez également essayer d'ajouter directement un gestionnaire d'événements comme celui-ci pour voir si elle est appelée:

mapReader.MapReady += (sender, args) => { }; 

Essayez aussi votre code à la fois sur un appareil avec l'une des dernière version Android, mais également sur un Android 5.x donc vous êtes sûr que vous n'avez pas de problème avec la demande de permissions à l'exécution introduit avec Android 6.0.