2

Ich habe bereits tausend Konfigurationen und Codes versucht, aber meine Kartenaktivität besteht darauf, nicht zu funktionieren. Dinge, die ich habe versucht:Map Fragment funktioniert nicht in Android

AndroidManifest.xml

  • aktiviert Zugriffsberechtigungen (INTERNET, ACCESS_FINE_LOCATION, READ_GSERVICES usw.);
  • aktiviert OpenGL (android: glEsVersion = "0x00020000" usw.);
  • geliefert zwei Schlüssel (com.google.android.geo.API_KEY und com.google.android.maps.v2.API_KEY) mit direkt in AndroidManifest und referenzieren, dass durch XML-Werte in Debug-und Freigabeordner (@ string/map_api);
  • versucht, Kartenbibliothek zu verwenden (uses-library android: name = "com.google.android.maps");
  • versucht, Berechtigungstag zu verwenden uses-permission (... permission.MAPS_RECEIVE);
  • versuchte Service-Version zu informieren (Android: name = "com.google.android.gms.version");
  • versucht, Schlüssel für ein eigenes Zertifikat und android.keystore unter .android-Ordner zu generieren;
  • Datei:

    <manifest package="com.myapp" 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:anrdroid="http://schemas.android.com/apk/res-auto"> 
        <uses-permission android:name="android.permission.INTERNET"/> 
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
        <application 
          android:allowBackup="true" 
          android:icon="@drawable/logo" 
          android:label="@string/name" 
          android:supportsRtl="true" 
          android:name="android.support.multidex.MultiDexApplication" 
        android:theme="@style/Default"> 
         <meta-data 
           android:name="com.google.android.geo.API_KEY" 
           android:value="@string/google_maps_key"/> 
          <activity 
           android:name=".view.MainActivity" 
           android:icon="@drawable/logo" 
           android:label="@string/name"> 
           <intent-filter> 
            <action android:name="android.intent.action.MAIN"/> 
            <category android:name="android.intent.category.LAUNCHER"/> 
           </intent-filter> 
          </activity> 
          <activity 
           android:name=".view.ActivityMap" 
           android:icon="@drawable/logo_row" 
           android:label="@string/name"> 
          </activity> 
          ... 
         </application> 
         </manifest> 
    

build.gradle

  • verschiedene Kompilierung versucht und Build-Konfigurationen (23, 22, 19 usw.);
  • versuchten verschiedene Bibliotheksversionen (8.4.0, 7.80 usw.);
  • ausprobiert verschiedene Bibliotheksversionen für appcompat Bibliothek (23.2.1, 22.2.1 usw.);
  • verwendet selektive kompilieren nur für Karten und Abhängigkeiten oder Google Services abgeschlossen;
  • versucht, debuggen und release mit gleichen und verschiedenen Schlüsseln zu signieren;
  • Datei:

    apply plugin: 'com.android.application' 
    
    android { 
        compileSdkVersion 23 
        buildToolsVersion '23.0.2' 
        defaultConfig { 
         applicationId "com.myapp" 
         minSdkVersion 16 
         targetSdkVersion 23 
         versionCode 1 
         versionName "0.0.1" 
         multiDexEnabled true 
        } 
    
        signingConfigs { 
         keystore { 
          storeFile file("path_to_keystore") 
          storePassword "my_password" 
          keyAlias "my_key_alias" 
          keyPassword "my_password" 
         } 
        } 
    
        buildTypes { 
         release { 
          minifyEnabled false 
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
          signingConfig signingConfigs.keystore 
         } 
        } 
    
        packagingOptions { 
         exclude 'META-INF/LICENSE' 
         exclude 'META-INF/NOTICE' 
         exclude 'META-INF/io.netty.versions.properties' 
         exclude 'META-INF/INDEX.LIST' 
        } 
    
        dexOptions { 
         javaMaxHeapSize "2g" 
        } 
    } 
    
    dependencies { 
        compile fileTree(dir: 'libs', include: ['*.jar']) 
        compile 'com.android.support:appcompat-v7:23.2.1' 
        compile 'com.android.support:design:23.2.1' 
        compile 'com.google.android.gms:play-services-maps:8.4.0' 
        compile 'com.datastax.cassandra:cassandra-driver-mapping:3.0.0' 
        compile 'com.fasterxml.jackson.core:jackson-core:2.5.4' 
        compile 'com.fasterxml.jackson.core:jackson-databind:2.5.4' 
    } 
    

-Code

  • versuchte sich AppCompat, FragmentActivity;
  • versucht, Erlaubnis in API 6 mit ActivityCompat.requestPermissions();
  • versucht Aufruf MapsInitializer.initialize() und überprüfen Sie Rückkehr;
  • versucht, nur Fragment in Layout-Datei zu verwenden, Kontext usw. zu informieren;
  • versucht, Fragment in FragmentLayout zu verwenden;
  • Dateien:

    public class ActivityMap extends FragmentActivity implements OnMapReadyCallback 
    { 
        private GoogleMap map; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) 
        { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_map); 
         SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.activityMapID); 
         fragment.getMapAsync(this); 
        } 
    
    
        @Override 
        public void onMapReady(GoogleMap googleMap) 
        { 
         map = googleMap; 
         map.addMarker(new MarkerOptions().position(new LatLng(-34, 151)).title("Marker in Sydney")); 
        } 
    } 
    

activity_map.xml:

<fragment android:id="@+id/activityMapID" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:map="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

Andere

  • überprüfte meine Netzwerkverbindungen und Firewalls;
  • überprüft, ob die Schlüssel in Google Console verfügbar waren und funktionierten;
  • versucht, mehrmals zu säubern, Projekt neu zu erstellen und Caches für Android Studio ungültig zu machen;
  • versucht, Daten zu löschen, Gerät neu zu starten und zu reinigen (und in mehr als einem Gerät getestet);
  • entfernt die App über adb mit "adb Shell pm clear ...";
  • keine nullpointers, onMapReady gibt eine gültige Karte und Debugging-Code, alles funktioniert gut;
  • Wenn ich eine neue Karten-App mit Android Studio erstelle, funktioniert alles einwandfrei;

Im ersten Anruf habe ich dieses Protokoll:

03-21 09:34:28.478 25570-26174/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.gms.maps.auth.ApiTokenService 
    03-21 09:34:29.770 25570-25570/com.myapp I/Choreographer: Skipped 127 frames! The application may be doing too much work on its main thread. 
    03-21 09:34:30.020 25570-27391/com.myapp I/b: Sending API token request. 
    03-21 09:34:30.090 25570-25633/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.location.internal.GoogleLocationManagerService 
    03-21 09:34:31.231 25570-27391/com.myapp I/b: Received API Token: AH0uPGGIx9Ygap4ZXq8T8vK7qcPxgyDi5NRIaIPyPauG4xWFn1lI7KQF9IuY2yqbpYMhWitKnTUiU-sZD9tFdJvr1naCVhz3c9APmLbueopuhcD6K5LHpZKnkYCQDEefhrTeGPNOR0fdz0QmC4WD8rkgQTbLmfbnOIA7cvZZBOmn7hFmcyavIVRQZlaY9_OLaPMFxIVFVBml/Expires in: 432000000ms 
    03-21 09:34:31.241 25570-27391/com.myapp I/c: Scheduling next attempt in 431700 seconds. 
    03-21 09:34:31.251 25570-27391/com.myapp I/d: Saved auth token 
    03-21 09:34:31.832 25570-25582/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.gms.clearcut.service.ClearcutLoggerService 

Dann, nach zweitem Anruf habe ich die Meldung, dass mein Schlüssel ungültig ist:

03-21 09:35:22.596 25570-25633/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.gms.clearcut.service.ClearcutLoggerService 
    03-21 09:35:37.762 25570-25570/com.myapp I/Google Maps Android API: Google Play services package version: 8703034 
    03-21 09:35:37.973 25570-28472/com.myapp E/Google Maps Android API: Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors). 
    03-21 09:35:38.363 25570-25582/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.location.internal.GoogleLocationManagerService 

Ich weiß nicht wirklich was zu tun ist. Hat jemand eine Idee, was könnte passieren?

Vielen Dank im Voraus.

+0

http://stackoverflow.com/questions/17491400/failed-to-load-map-error-contacting-google-servers-issue-with-android-google-ma Ein weiterer Link: http ://Paketüberfluss.com/questions/17667935/failed-to-load-map-error-kontaktieren-google-servers-dieses-ist-wahrscheinlich-ein-authentisch –

+0

Ich nehme an, Sie sind ziemlich verwirrt. Wie Ihre andere Karten-App funktioniert. Sie haben sicherlich etwas Konfiguration verpasst, während Sie den Prozess in der aktuellen App verfolgen. –

+0

Die seltsame Sache ist, wenn ich direkt meine Kartenaktivität von Manifest als Launcher aufrufen, funktioniert es gut. Wenn ich es von einer anderen Aktivität aus anrufe, funktioniert das nicht. Ich versuche immer noch, ein Berechtigungsproblem herauszufinden ... – user2387273

Antwort

1

Endlich fand ich das Problem.

meines Codes In einem anderen Teil wurde ich

Aufruf
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); 

alle Anrufe für HTTPS ich tun, zu vereinfachen. Das Problem war, als Google Maps versuchte, seinen Server anzurufen: Es verwendete den gleichen SSL-Kontext, den ich zuvor festgelegt hatte, sodass er keine Verbindung zu Map-Servern herstellen konnte.

Ich habe diese Linie nur kommentiert und änderte mein Code:

URLConnection urlConn = new URL(myAddress).openConnection(); 
    HttpsURLConnection https = (HttpsURLConnection) urlConn; 
    https.setSSLSocketFactory(sslContext.getSocketFactory()); 

und alles funktioniert wie Magie!

Danke allen!

0

Versuchen Sie diese Zeile am Ende des

anwenden build.radle Plugin hinzuzufügen: 'com.google.gms.google-services'

hinzufügen es in innerhalb von manifest tag:

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

Danke für den Tipp, aber hat noch nicht funktioniert ... – user2387273

+0

Haben Sie die App deinstalliert und neu installiert? –

+0

Ja, viele Male. Und OpenGL wurde bereits aktiviert ... – user2387273