MapView Google Maps API V2 выглядит пустым, отображается только сетка с кнопкой +/-

Я делаю все шаги, добавляю google-play-services в свой проект, делаю все. Я не знаю, в чем проблема. Я создаю свой ключ API, используя отпечаток сертификата отладки, используя отпечаток SHA1 в окнах eclipse> настройки> Android; Я использую LG E400 с Android 2.3.6.

Основная активность:

import android.os.Bundle;
import android.app.Activity;


import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;

public class MainActivity extends Activity {
  GoogleMap map;
  MapView m;
  com.google.android.gms.maps.Projection projection;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     m=(MapView) findViewById(R.id.mapview);
    m.onCreate(savedInstanceState);
    map = m.getMap();
    if (map != null) {
        // The Map is verified. It is now safe to manipulate the map.

    }else{
        // check if google play service in the device is not available or out-dated.
        GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

        // nothing anymore, cuz android will take care of the rest (to remind user to update google play service).
    }

    try{map.getUiSettings().setMyLocationButtonEnabled(false);
    map.setMyLocationEnabled(true);
    }catch(Exception ex){ex.printStackTrace();}

    MapsInitializer.initialize(this);

}
@Override
public void onResume() {

    super.onResume();
    m.onResume();
}
@Override
public void onDestroy() {
    super.onDestroy();
    m.onDestroy();
}
@Override
public void onLowMemory() {

   super.onLowMemory();
   m.onLowMemory();
}
 @Override
public void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);
     m.onSaveInstanceState(outState);
  }
}

макет:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >


<com.google.android.gms.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

</RelativeLayout>

манифест:

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

android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="15" />

<permission
    android:name="com.example.voicesee.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.example.voicesee.permission.MAPS_RECEIVE" />
<!-- Copied from Google Maps Library/AndroidManifest.xml. -->
<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"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"  />                                                   
<!-- The following two permissions are not required to use
 Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>


<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
   <meta-data
   android:name="com.google.android.gms.version"
   android:value="@integer/google_play_services_version" />


    <activity
        android:name="com.example.voicesee.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

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


</application>

thanks for help!!


person user3338328    schedule 26.02.2014    source источник


Ответы (6)


У меня была похожая проблема, моя проблема заключалась в том, что я выбирал неправильное хранилище ключей отладки. Я работаю с машиной Ubuntu. Поскольку я открыл eclipse как root, хранилище ключей по умолчанию в eclipse находилось в моей корневой папке (/root/.android/.android/debug.keystore), пока я создавал ключ API с хранилищем ключей отладки из моей пользовательской папки. Я добавил ссылку на ответ на вопрос: Google Maps V2 показывает пустой экран на Android 2.2

person euniceadu    schedule 28.02.2014

вы уверены: ваш проект в Google Console включает

Android-API Google Карт v2

person hungkk    schedule 26.02.2014
comment
Да!! Я уверен, я сделал это! - person user3338328; 27.02.2014

Во-первых, я не понимаю, почему вы используете MapView при размещении карты в Acitivity, потому что это более сложный способ отображения карты, когда вы это делаете, документация гласит:

Для более простого метода отображения карты используйте MapFragment (или SupportMapFragment), если вы хотите работать с более ранними платформами.

Во-вторых, если вы уже это сделали, то вы допустили некоторые ошибки при его реализации, потому что разместили:

MapsInitializer.initialize(this);

не в том месте, как указано в документации. сообщает:

Используйте этот класс для инициализации Google Maps Android API, если необходимо использовать функции перед получением карты. Его нужно вызвать, потому что некоторые классы, такие как BitmapDescriptorFactory и CameraUpdateFactory, необходимо инициализировать.

person Emil Adz    schedule 27.02.2014

Вы захотите использовать фрагмент для включения вашей карты, а фрагменты поддерживаются только уровнями Android API 11 и выше (3.0 и выше). Это, вероятно, причина вашей проблемы.

Как упоминалось здесь, вам нужно использовать SupportMapFragment для вашей версии API.

Вот ссылка чтобы научиться им пользоваться.

Если это не сработает, я предполагаю, что это ключ API. У нас была ситуация раньше, когда загружалась сетка и кнопки масштабирования, а не карта, и виновником был ключ. Я бы выполнил шаги здесь, чтобы убедиться, что вы все сделали правильно. (включая использование сервисов Google Play)

person Skitterm    schedule 28.02.2014

В моем коде я меняю представление карты с помощью supportMapfragment, я удаляю свой предыдущий инструмент debug.keytool и перестраиваю его, затем я удаляю свой старый apikey и создаю новый ключ. Кажется, моя проблема заключалась в соединении с сервисом Google Play, потому что он работает после добавления GooglePlayServicesUtil .isGooglePlayServicesAvailable() и проверьте соединение с сервисами Google Play перед вызовом setContentview().

person user3338328    schedule 28.02.2014

один раз проверьте свой ключ API в манифесте и ключ SHA вашего приложения. Вы можете создать новый, перейдя на console.developers.google.com.

Чтобы увидеть затмение ключа SHA, перейдите в -> окна> настройки> выберите Android на левой панели> нажмите на сборку

Чтобы увидеть студию Android с ключом SHA, перейдите по этой ссылке mode">Как получить сертификат отпечатка пальца SHA-1 в Android Studio для режима отладки?

person Balman Rawat    schedule 12.01.2016