3

Я пытаюсь создать образец для отображения Карт Google в приложении Android с Android Studio. Я намерен поддерживать API-уровень 14 и более. Когда я создаю новый проект с Google Map Activity, он работает правильно, но использует SupportMapFragment, а не MapFragment, который рекомендуется использовать с уровнем API 12 и выше.
Я следовал Getting Started руководствам разработчиков Google.Android Studio интегрирует API Карт Google v2

Я не могу видеть карту. Приложение закрывается, когда я хочу показать активность с картой. Ошибка в строке, которая устанавливает представление содержимого.

setContentView(R.layout.activity_map); 

И мой activity_map.xml является:

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:name="com.google.android.gms.maps.MapFragment"/> 

В buld.gradle (модуль: приложение) я имею следующую строку в зависимости

compile 'com.google.android.gms:play-services:6.5.87' 

И в AndroidManifest.xml

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


<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

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

    <activity android:name=".MapActivity" 
     android:label="@string/title_activity_map"> 
     <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.geo.API_KEY" 
     android:value="MY_API_KEY_IS_HERE" /> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

</application> 

Ошибка, я получаю это

28088-28088/com.albanianwonders.googlemapapiv2 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.albanianwonders.googlemapapiv2/com.albanianwonders.googlemapapiv2.MapActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 
     at android.app.ActivityThread.access$700(ActivityThread.java:157) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:176) 
     at android.app.ActivityThread.main(ActivityThread.java:5319) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:467) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:360) 
     at android.app.Activity.setContentView(Activity.java:1932) 
     at com.albanianwonders.googlemapapiv2.MapActivity.onCreate(MapActivity.java:14) 
     at android.app.Activity.performCreate(Activity.java:5326) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 
            at android.app.ActivityThread.access$700(ActivityThread.java:157) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:176) 
            at android.app.ActivityThread.main(ActivityThread.java:5319) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
            at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior: 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
     at com.google.maps.api.android.lib6.c.ck.a(Unknown Source) 
     at com.google.maps.api.android.lib6.c.i.a(Unknown Source) 
     at com.google.maps.api.android.lib6.c.el.a(Unknown Source) 
     at com.google.maps.api.android.lib6.c.ab.a(Unknown Source) 
     at com.google.maps.api.android.lib6.c.aa.a(Unknown Source) 
     at com.google.android.gms.maps.internal.x.onTransact(SourceFile:107) 
     at android.os.Binder.transact(Binder.java:310) 
     at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source) 
     at com.google.android.gms.maps.MapFragment$a.onCreateView(Unknown Source) 
     at com.google.android.gms.dynamic.a$4.b(Unknown Source) 
     at com.google.android.gms.dynamic.a.a(Unknown Source) 
     at com.google.android.gms.dynamic.a.onCreateView(Unknown Source) 
     at com.google.android.gms.maps.MapFragment.onCreateView(Unknown Source) 
     at android.app.Fragment.performCreateView(Fragment.java:1699) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:879) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1053) 
     at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1155) 
     at android.app.Activity.onCreateView(Activity.java:4916) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686) 

ли я что-то отсутствует в конфигурации?
Как проверить правильность импорта приложений Google Play в Android Studio?

+0

«Ошибка на линии, которые устанавливают вид контента.» - Какая ошибка? Если вы переключились на 'com.google.android.gms.maps.MapFragment', вы также переключили действие на наследование с' Activity' (вместо 'ActionBarActivity') и переключили' AppTheme', чтобы не наследовать от 'Theme.AppCompat '? – CommonsWare

+0

Я создал 2 отдельных проекта. Первый из шаблона, который предлагает Android Studio, и второй без каких-либо действий. Я сам создал все файлы. – Endri

+0

Я добавил ошибку на вопрос. – Endri

ответ

1

Спасибо вам всем что вы проводите свое время, помогая мне.
Я сам нашел ответ. Моя ошибка в том, что я положил uses-permission и uses-features в теги <application> ... </application>.

Они должны быть размещены внутри тегов <manifest> ... </manifest>.

Правильный AndroidManifest.xml является:

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

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


    <activity android:name=".MapActivity" 
     android:label="@string/title_activity_map"> 
     <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.geo.API_KEY" 
     android:value="MY_API_KEY_IS_HERE" /> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

</application> 
</manifest> 
1

Я прочитал ваш код, код является correct.you использовать эту библиотеку

компиляции 'com.google.android.gms: играть-услуги: 4.2+'

+1

Должен ли я заменить это на строку, которую я использую в build.gradle? Я пробовал это, и он не будет работать. – Endri