2013-06-22 3 views
1

Я новичок в Stackoverflow. У меня возникла проблема с перемещением карты на новый API Карт Google v2. Я сделал все шаги с этой страницы https://developers.google.com/maps/documentation/android/start?hl=pl и некоторые учебные пособия, и я не могу отобразить карту. Когда я запускаю свое приложение, на эмуляторе отображаются только элементы управления увеличением, а экран отдыха - белый, и я не могу открыть его на своем реальном устройстве (HTC Wildfire S- android 2.3.5). Я добавил google_play_service_lib в свой проект. Я искал ответ для своей проблемы на многих страницах и во многих учебниках, но я не нашел их! Пожалуйста, помогите мне!API Карт Google v2 не может отображать карту

Это мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.adrianspora.googlemaptest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.adrianspora.googlemaptest.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="AIzaSyD6r1gse4Jx4sTrCECvLQQwgxLJikHm4Ow"/> 
    </application> 
    <permission 
     android:name="com.adrianspora.googlemaptest.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature"/> 
<uses-permission android:name="com.adrianspora.googlemaptest.permission.MAPS_RECEIVE"/> 
<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"/> 
<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"/> 

</manifest> 

Там же код MainActivity:

package com.adrianspora.googlemaptest; 

import com.google.android.gms.maps.MapFragment; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 

public class MainActivity extends Activity { 

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

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

И это код главного компоновщика:

<LinearLayout 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" > 


<fragment 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:name="com.google.android.gms.maps.MapFragment"/> 

</LinearLayout> 

Существует список бревен дисплеев в LogCat :

06-22 14:51:44.897: D/AndroidRuntime(1092): Shutting down VM 
06-22 14:51:44.927: W/dalvikvm(1092): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
06-22 14:51:44.996: E/AndroidRuntime(1092): FATAL EXCEPTION: main 
06-22 14:51:44.996: E/AndroidRuntime(1092): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adrianspora.googlemaptest/com.adrianspora.googlemaptest.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.os.Looper.loop(Looper.java:137) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at dalvik.system.NativeStart.main(Native Method) 
06-22 14:51:44.996: E/AndroidRuntime(1092): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.Activity.setContentView(Activity.java:1881) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at com.adrianspora.googlemaptest.MainActivity.onCreate(MainActivity.java:15) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.Activity.performCreate(Activity.java:5104) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  ... 11 more 
06-22 14:51:44.996: E/AndroidRuntime(1092): Caused by: java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.support.v4.app.Fragment.instantiate(Fragment.java:394) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.support.v4.app.Fragment.instantiate(Fragment.java:369) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 
06-22 14:51:44.996: E/AndroidRuntime(1092):  ... 21 more 
06-22 15:00:25.848: D/dalvikvm(1273): GC_CONCURRENT freed 256K, 15% free 2600K/3032K, paused 85ms+37ms, total 193ms 
06-22 15:00:26.236: D/dalvikvm(1273): GC_CONCURRENT freed 272K, 14% free 2742K/3188K, paused 72ms+5ms, total 116ms 
06-22 15:00:26.267: E/Google Maps Android API(1273): Google Maps Android API v2 only supports devices with OpenGL ES 2.0 and above 
06-22 15:00:26.487: D/dalvikvm(1273): GC_FOR_ALLOC freed 152K, 11% free 2895K/3224K, paused 40ms, total 41ms 
06-22 15:00:26.747: D/dalvikvm(1273): GC_CONCURRENT freed 85K, 8% free 3271K/3540K, paused 22ms+87ms, total 155ms 
06-22 15:00:27.057: D/libEGL(1273): Emulator without GPU support detected. Fallback to software renderer. 
06-22 15:00:27.087: I/Choreographer(1273): Skipped 56 frames! The application may be doing too much work on its main thread. 
06-22 15:00:27.127: D/libEGL(1273): loaded /system/lib/egl/libGLES_android.so 
06-22 15:00:27.188: D/gralloc_goldfish(1273): Emulator without GPU emulation detected. 
06-22 15:00:28.117: D/dalvikvm(1273): GC_CONCURRENT freed 266K, 12% free 3470K/3912K, paused 36ms+7ms, total 128ms 
06-22 15:00:28.117: D/dalvikvm(1273): WAIT_FOR_CONCURRENT_GC blocked 79ms 
06-22 15:00:28.216: D/dalvikvm(1273): GC_FOR_ALLOC freed 435K, 18% free 3340K/4044K, paused 45ms, total 51ms 
06-22 15:00:28.348: D/dalvikvm(1273): GC_CONCURRENT freed 326K, 15% free 3470K/4044K, paused 15ms+8ms, total 69ms 
06-22 15:00:28.348: D/dalvikvm(1273): WAIT_FOR_CONCURRENT_GC blocked 45ms 
06-22 15:00:28.557: D/dalvikvm(1273): GC_CONCURRENT freed 551K, 19% free 3399K/4152K, paused 21ms+26ms, total 113ms 
06-22 15:00:36.126: E/Google Maps Android API(1273): Authorization failure. Please see https://developers.google.com/maps/documentation/android/start for how to correctly set up the map. 
06-22 15:00:36.136: E/Google Maps Android API(1273): Ensure that the following correspond to what is in the API Console: Package Name: com.adrianspora.googlemaptest, API Key: AIzaSyD6r1gse4Jx4sTrCECvLQQwgxLJikHm4Ow, Certificate Fingerprint: 1D915CBBCDEBB8CECC48371ED32EE0D5CA5DB443 
06-22 15:14:09.636: E/Trace(1502): error opening trace file: No such file or directory (2) 
06-22 15:14:11.196: D/dalvikvm(1502): GC_CONCURRENT freed 230K, 14% free 2599K/3004K, paused 124ms+91ms, total 328ms 
06-22 15:14:11.386: E/Google Maps Android API(1502): Google Maps Android API v2 only supports devices with OpenGL ES 2.0 and above 
06-22 15:14:11.626: D/dalvikvm(1502): GC_CONCURRENT freed 264K, 14% free 2789K/3228K, paused 73ms+86ms, total 226ms 
06-22 15:14:11.796: D/dalvikvm(1502): GC_FOR_ALLOC freed 119K, 12% free 2913K/3280K, paused 37ms, total 38ms 
06-22 15:14:12.106: D/dalvikvm(1502): GC_CONCURRENT freed 64K, 8% free 3288K/3556K, paused 71ms+73ms, total 208ms 
06-22 15:14:12.477: D/libEGL(1502): Emulator without GPU support detected. Fallback to software renderer. 
06-22 15:14:12.496: D/libEGL(1502): loaded /system/lib/egl/libGLES_android.so 
06-22 15:14:12.536: I/Choreographer(1502): Skipped 69 frames! The application may be doing too much work on its main thread. 
06-22 15:14:12.656: D/gralloc_goldfish(1502): Emulator without GPU emulation detected. 
06-22 15:14:13.307: D/dalvikvm(1502): GC_CONCURRENT freed 332K, 14% free 3358K/3868K, paused 143ms+137ms, total 477ms 
06-22 15:14:13.307: D/dalvikvm(1502): WAIT_FOR_CONCURRENT_GC blocked 322ms 
06-22 15:14:13.766: D/dalvikvm(1502): GC_CONCURRENT freed 365K, 15% free 3471K/4040K, paused 6ms+7ms, total 296ms 
06-22 15:14:13.766: D/dalvikvm(1502): WAIT_FOR_CONCURRENT_GC blocked 97ms 
06-22 15:14:13.866: D/dalvikvm(1502): GC_FOR_ALLOC freed 434K, 18% free 3342K/4040K, paused 39ms, total 46ms 
06-22 15:14:14.056: D/dalvikvm(1502): GC_CONCURRENT freed 433K, 16% free 3400K/4040K, paused 12ms+27ms, total 109ms 
06-22 15:14:18.076: E/Google Maps Android API(1502): Authorization failure. Please see https://developers.google.com/maps/documentation/android/start for how to correctly set up the map. 
06-22 15:14:18.076: E/Google Maps Android API(1502): Ensure that the following correspond to what is in the API Console: Package Name: com.adrianspora.googlemaptest, API Key: AIzaSyD6r1gse4Jx4sTrCECvLQQwgxLJikHm4Ow, Certificate Fingerprint: 1D915CBBCDEBB8CECC48371ED32EE0D5CA5DB443 
06-22 15:14:23.066: I/Choreographer(1502): Skipped 96 frames! The application may be doing too much work on its main thread. 

ответ

4

Вы должны использовать Support Fragment с момента мин SDK является 8.

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/SupportMapFragment

<fragment 
class="com.google.android.gms.maps.SupportMapFragment" 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent"/> 

Ваша деятельность должна распространяться FragmentActivity и инициализировать объект GoogleMap использовать ниже.

SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
GoogleMap mMap = fm.getMap(); 

Убедитесь, что вы добавили поддержку библиотеки

Также убедитесь, что вы импортировали ниже

import android.support.v4.app.FragmentActivity; 
import com.google.android.gms.maps.SupportMapFragment;  

Проверьте, если у вас есть включены карты для Android в Google API консоли на вкладке службы.

Проверить, если вы выполнили все шаги, указанные в документации

https://developers.google.com/maps/documentation/android/start

Вы также можете проверить подобный вопрос я ответил.

App shows grid screen instead of google map

Когда я бегу мое приложение на эмуляторе отображается только увеличений управления и экран остальное белый

Вы должны проверить его на реальном устройстве.

+0

Я не верю. Оно работает! Но не правильно:/В эмуляторе и моем устройстве карта не отображается. Я могу видеть только элементы управления. – user2511941

+0

@ user2511941 Вы внесли изменения, которые я предложил в своем ответе? – Raghunandan

+0

@ user2511941 проверить последнюю ссылку в ответе. подобный вопрос я ответил. – Raghunandan

0

Вы должны использовать SupportMapFragment, так как ваш уровень API является 2.3.5

Замените фрагмент в формате XML с:

<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment" /> 

, а также импортировать этот класс в файле Java, а MapFragment.

Кроме того, в качестве общих рекомендаций, вы должны использовать Support library если вы хотите поддерживать устройства предварительно Honeycomb и фрагменты использования и т.д.

+0

Извините за предыдущую должность. Я не заканчиваю его, и я добавил его случайно. Я импортировал это: import com.google.android.gms.maps.SupportMapFragment; импорт android.support.v13. *; изменить мой фрагмент, установить библиотеки поддержки android и добавить android-support-v13.jar в каталог libs моего проекта, и он все еще не работает, t – user2511941

+0

Почему вы импортировали v13? Это не будет работать на 2.3.5. Кроме того, посмотрите на эту строку вашего логарифма: вызвано: java.lang.ClassCastException: com.google.android.gms.maps.MapFragment не может быть добавлено в android.support.v4.app.Fragment -> вам следует импортировать v4 –

+0

Ой, я думал, что v13 добавлена ​​новая версия для поддержки новых API для старой версии Android. Хорошо, я изменил это, но ничего не изменилось. – user2511941

0

Какой API-ключ вы используете? Вы всегда должны использовать девиц-ключ при программировании, и ваше приложение должно быть зарегистрировано в консоли API Google.

И вы должны добавить Google-игры-сервисов библиотеки в Preferences/Android, а не на Preferences/Java Build Path.

+0

Какой? Я создал свой ключ на code.google.com в соответствии с этой страницей https://developers.google.com/maps/documentation/android/start?hl=pl. Это Android-ключ к API Google Maps v2. – user2511941

+0

и я добавил google-play-services-library в свойствах -> Ресурсы -> Android -> Добавить – user2511941

+0

Является ли это отладочным сертификатом или ключом сертификата выпуска? Если вы не создали свой отпечаток SHA1 с помощью debug.keystore, он не будет работать при тестировании. – Cerdo

0
You have to use FragmentActivity 

public class PlacesMapActivity extends android.support.v4.app.FragmentActivity 
    implements OnClickListener, LocationListener { 

ImageButton btn_home; 
private GoogleMap mMap; 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_map); 

    SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mMap = fragment.getMap(); 
    mMap.setMyLocationEnabled(true); 

    // mMap = ((SupportMapFragment) getSupportFragmentManager() 
    // .findFragmentById(R.id.map)).getMap(); 

    MarkerOptions markerOptions = new MarkerOptions(); 
    markerOptions.title("First Location"); 
    markerOptions.snippet("This Is Test Location"); 

    LatLng latlng = new LatLng(23.0333, 72.6167); 

    markerOptions.position(latlng); 
    // markerOptions.title("Ahmedabad Cordinat Found here"); 

    // Marker m = mMap.addMarker(markerOptions); 

    mMap.setInfoWindowAdapter(new InfoWindowAdapter() { 

     @Override 
     public View getInfoWindow(Marker arg0) { 

      return null; 
     } 

     @Override 
     public View getInfoContents(Marker marker) { 

      View myContentView = getLayoutInflater().inflate(
        R.layout.custommarker, null); 
      TextView tvTitle = ((TextView) myContentView 
        .findViewById(R.id.title)); 
      tvTitle.setText(marker.getTitle()); 
      TextView tvSnippet = ((TextView) myContentView 
        .findViewById(R.id.snippet)); 
      tvSnippet.setText(marker.getSnippet()); 
      return myContentView; 

     } 
    }); 

    mMap.addMarker(new MarkerOptions() 
      .position(latlng) 
      .title("This is Sabarmati Ashram") 
      .snippet("Ahmedabad") 
       .icon(BitmapDescriptorFactory      .defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

    mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 

     @Override 
     public void onInfoWindowClick(Marker arg0) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(getBaseContext(), 
        DetailsOfPlacesActivity.class); 
      startActivity(intent); 
     } 
    }); 

    btn_home = (ImageButton) findViewById(R.id.activity_map_ibtn_home); 
    btn_home.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      finish(); 
     } 
    }); 
} 
0

У меня была такая ошибка, и я старался, как 6 уроков, и прочитал всю документацию из Google. И, наконец, я запустил и отобразил карту. Вот как это работает для меня.

1. Восстановите библиотеки google-play-services и android support-v4 как от вашего затмения, так и от вашего ПК. 2.Нагрузите снова это из sdk-менеджера. 3.Чтобы указать инструкции [здесь] (https://developers.google.com/maps/documentation/android/intro#sample_code), перейдите к Примерному коду и сделайте, как говорится. Проверьте это Существующий код для Android в рабочем пространстве, не импортируйте библиотеки в качестве проектов, они не будут работать. 4. Измените весь свой MapFragment для SupportMapFragment, не упустите возможность продлить действие Actvity на FragmentActivity (это был мой отказ). 5.Disable (если он включен) вариант автоматической сборки из вашего проекта. 6. Очистите проект. 5.Enable возможность автоматической сборки.

Должно работать.

Смежные вопросы