Я пытаюсь сделать демонстрацию с картами Google android v2 с очень простой деятельностью, просто скопируйте код со страницы google: https://developers.google.com/maps/documentation/android/start#adding_the_api_key_to_your_application
для деятельности:
package com.example.mapdemo;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
для верстки:
<?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"
class="com.google.android.gms.maps.MapFragment"/>
Я подал заявку на ключ api в соответствии со страницей и изменил свой файл androidmanifest.xml, вот так:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wenhai.driverschool"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<!-- add for map2 -->
<permission
android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!-- External storage for caching. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Maps API needs OpenGL ES 2.0. -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDVAF4WaVSVRDKJx87It8OSFP5txQcPabc" />
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Я также ссылаюсь на свое приложение на google-play-services_lib в eclipse.
но каждый раз отчет об ошибке в logcat выглядит следующим образом:
2-05 16:22:53.609: E/AndroidRuntime(21623): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wenhai.driverschool/com.wenhai.driverschool.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.ActivityThread.access$600(ActivityThread.java:127)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.os.Looper.loop(Looper.java:137)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.ActivityThread.main(ActivityThread.java:4441)
12-05 16:22:53.609: E/AndroidRuntime(21623): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623): at java.lang.reflect.Method.invoke(Method.java:511)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
12-05 16:22:53.609: E/AndroidRuntime(21623): at dalvik.system.NativeStart.main(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.Activity.setContentView(Activity.java:1835)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.java:11)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.Activity.performCreate(Activity.java:4465)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
12-05 16:22:53.609: E/AndroidRuntime(21623): ... 11 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.Fragment.instantiate(Fragment.java:581)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.Fragment.instantiate(Fragment.java:549)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.Activity.onCreateView(Activity.java:4235)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
12-05 16:22:53.609: E/AndroidRuntime(21623): ... 20 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment
12-05 16:22:53.609: E/AndroidRuntime(21623): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
12-05 16:22:53.609: E/AndroidRuntime(21623): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-05 16:22:53.609: E/AndroidRuntime(21623): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
12-05 16:22:53.609: E/AndroidRuntime(21623): at android.app.Fragment.instantiate(Fragment.java:571)
12-05 16:22:53.609: E/AndroidRuntime(21623): ... 23 more
Я не знаю причины этого.
Если я добавлю google-play-services.jar в свой проект, он сообщит еще об ошибке:
12-05 16:34:23.269: E/AndroidRuntime(22638): FATAL EXCEPTION: main
12-05 16:34:23.269: E/AndroidRuntime(22638): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.Activity.onCreateView(Activity.java:4242)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.Activity.setContentView(Activity.java:1835)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.java:11)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.Activity.performCreate(Activity.java:4465)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.ActivityThread.access$600(ActivityThread.java:127)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.os.Looper.loop(Looper.java:137)
12-05 16:34:23.269: E/AndroidRuntime(22638): at android.app.ActivityThread.main(ActivityThread.java:4441)
12-05 16:34:23.269: E/AndroidRuntime(22638): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:34:23.269: E/AndroidRuntime(22638): at java.lang.reflect.Method.invoke(Method.java:511)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
12-05 16:34:23.269: E/AndroidRuntime(22638): at dalvik.system.NativeStart.main(Native Method)
Кто-нибудь может мне в этом помочь?
Ответы:
В IntelliJ IDEA (обновлено для IntelliJ 12):
~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/src/dummy.java
содержащийclass dummy {}
.~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib
~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
<Module source>
в конец списка.Вы можете удалить,
dummy.java
если хотите.Изменить: после использования этого в течение некоторого времени я обнаружил, что есть небольшая ошибка / ошибка. IDEA иногда будет жаловаться на то, что не может открыть
.iml
файл проекта вgoogle-play-services_lib
каталоге, несмотря на то, что вы никогда не говорили, что там есть проект. Если это произойдет, перестройка проекта решит проблему, по крайней мере, до тех пор, пока она не вернется.источник
File > Import Module
вариант в моемEclipse IDE
. Пожалуйста, помогите мне ...Обновить
Следующий фрагмент отлично работает на моей стороне. Я решил использовать
SupportMapFragment
.Не забудьте добавить
google-play-services.jar
в свой проект.MainActivity.java
package com.example.newmapview; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.google.android.gms.maps.SupportMapFragment; public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SupportMapFragment fragment = new SupportMapFragment(); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment).commit(); } }
manifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.newmapview" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <permission android:name="com.example.newmapview.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.newmapview.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.newmapview.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="XXXXX" /> </application> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> </manifest>
Вот результат
Надеюсь, это поможет.
источник
Просто попробуйте заменить свой макет на:
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="wrap_content" android:layout_height="match_parent" />
Вам необходимо использовать SupportMapFragment для API младше 11 лет!
Аурел
источник
Я столкнулся с той же проблемой, и мне потребовалось несколько дней, чтобы найти решение, которое сработало для меня:
google-play-services_lib
(щелкните правой кнопкой мыши на удалении проекта)MainActivity
в моем случае), если она у вас естьВы должны увидеть что-то вроде этого:
Примечание: у вас не должно быть чего-то подобного (проект должен быть указан из вашей рабочей области):
Я думаю, что проблема в том, что буксирные проекты ссылаются на одну и ту же библиотеку
источник
попробуй это
http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject
Я только что добавил проект сервисов Google и добавил ссылку в свойстве проекта-> Android
источник
Добавьте два jar-файла в каталог libs вашего проекта. Следуйте информации ниже. В частности, я считаю, что вам необходимо:
Я обнаружил, что этот второй шаг был необходим, поскольку я сталкивался с той же ошибкой, что и вы, при попытке использовать образец кода. Первый шаг был необходим, чтобы избежать ошибки NoClassDefFoundError в com.google.android.gms.R $ в моем реальном проекте.
Мне также нужно было выполнить чистую сборку и удалить приложение с устройства (из более ранней тестовой попытки), прежде чем образец кода сработает.
большое спасибо за вашу помощь.
источник
Возможно, вам стоит выделить это:
http://developer.android.com/google/play-services/setup.html
Вы должны предоставить физическое устройство разработки, на котором вы можете запускать и отлаживать свое приложение. Не используйте эмулятор. Не будет работать.
источник
В вашем
MainActivity
(или в каждом действии, которое вы хотите разместить карту v2) вы должны расширитьFragmentActivity
илиActivity
как вы хотите использоватьSupportMapFragment
или простоMapFragment
. ИспользуйтеMapFragment
класс, только если вы ориентируетесь на API 12 и выше. В противном случае используйтеSupportMapFragment
. Это небольшая разница, но она приводит к ошибке.источник
Поскольку карта Google теперь обернута в Fragments, расширьте свою активность из FragmetActivity, а не только Activity, и убедитесь, что если вы используете « supporrtMapFragment », то вы импортируете фрагмент только из пакета поддержки .
источник
SupportMapFragment
. Без него не работает ...В моем проекте Intellij Idea мне пришлось добавить в проект оба: google-play-services_lib и google-play-services.jar. И в проекте google-play-services_lib добавьте также google-play-services.jar. После этого, если вы сделали все, что описано здесь , верно, ваше приложение должно работать.
источник
Это было немного сложно, потому что в предыдущем API все было иначе, но я нашел решение. Google говорит, что здесь делать ; в соответствии с вопросом, нам нужны
com.google.android.gms
классы, поэтому необходимо настроитьgoogle play services
, это просто библиотека, которую мы должны добавить в наш проект, как эта ссылка . Очень важно импортировать копию библиотеки проекта, аgoogle-play-services_lib
не ту, что находится в папке sdk. Как только это будет сделано, учебник от Google будет идеальным.источник
Помимо многих вещей, упомянутых ранее, для меня было важно отметить .jar также в порядке и экспорте. Насколько я могу судить, обычно не упоминается, и для меня это было очень важно.
источник
относятся к этому предложению: https://stackoverflow.com/a/20215481/3080835
также мне пришлось добавить это к
Application
элементу в манифесте:<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
и это сработало отлично.
источник
Добавьте эту зависимость в build.gradle
compile 'com.google.android.gms:play-services:6.5.87
'Теперь это работает
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="388dp" android:layout_weight="0.40" /> </LinearLayout>
источник
Чтобы позаботиться об импорте, связанном с Диском, вам понадобится несколько банок из
Google Drive SDK
. Есть несколько больших, поэтому вы можете добавить их индивидуально, чтобы они соответствовали вашему приложению.Если это не решит проблему
com.google.android.gms.* imports
,the Google Play Services add-on needs to be installed (from Extras -> Google Play Services in the SDK Manager) and google-play-services.jar needs to be added to your build path.
РЕДАКТИРОВАТЬ:
В этом случае потребовались следующие банки:
google-api-services-drive-v2-rev1-1.7.2-beta.jar
google-http-client-1.10.3-beta.jar
google-http-client-android2-1.10.3-beta.jar
google-oauth-client-1.10.1-beta.jar
google-api-client-android2-1.10.3-beta.jar
google-api-client-1.10.3-beta.jar
источник
У меня была такая же проблема на моем LG-E730 с 2.3.4 Android. Ошибка появляется до того, как я обновил сервис Google Play на своем телефоне.
источник
Не забудьте создать google-play-services_lib !! Вот почему показывает "Не удалось найти google-play .... apk". Для меня в Eclipse не требовалось никаких других хаков, кроме ссылки на проект из подменю Android, а не из пути сборки Java, ссылок на проекты или чего-то еще. Никаких ручных банок, мне вообще ничего не понадобилось.
источник
В Eclipse необходимо создать отдельный проект для сервисов Google Play и ссылаться на него как на библиотеку из вашего проекта Android, а не просто добавлять к нему jar. На своем компьютере я импортировал проект Eclipse служб Google Play непосредственно из D: \ adt-bundle-windows-x86-20130219 \ sdk \ extras \ google \ google_play_services \ libproject \ google-play-services_lib и установил его в проект Lib, поэтому я мог ссылаться на него из моего проекта Android.
источник
В том же руководстве говорится, что
Просто измените минимальную версию SDK на 12, и она будет работать
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
Haven еще не пробовал обходной путь Aurel для более старых версий API.
источник
Я думаю, стоит упомянуть (после того, как я потратил более часа на выдергивание волос), что если вы используете MapFragment, вы не можете использовать FragmentActivity (SupportMapFragment будет нормально работать в этой среде). Я был почти готов отказаться от этого.
источник
Первый шаг http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject Второй шаг http://developer.android.com/google/play-services/setup.html На этой странице есть ПРИМЕЧАНИЕ но мы не обратили внимания
Примечание. Вы должны ссылаться на копию библиотеки, которую вы скопировали в свое исходное дерево - вы не должны ссылаться на библиотеку из каталога Android SDK.
Но я думаю, что это не лучший способ документации :)
источник
Кому-то это может помочь. У меня было два проекта, один из которых был копией демонстрационной версии от Google и работал нормально. Другой я скопировал в существующий проект, и мне вообще не удалось его запустить. А во втором неудачном я получил сообщение об ошибке, описанное выше.
Моя проблема возникла из-за того, что библиотека не активирована, хотя я перестраивал, импортировал несколько раз и т. Д. Щелкните правой кнопкой мыши проект -> Свойства -> Путь сборки Java -> вкладка Заказ и экспорт. В неудачном проекте вкладка «Частные библиотеки Android» не отмечена.
Как только я его включил, проект заработал нормально.
источник
у меня было все, что говорили все выше, и я решил ошибку, просто вызвав
super.onCreate(savedInstanceState);
первую инструкцию в методе oncreate; до того, как это была последняя строка в методе. : | потратил впустую целый день.источник
У меня эта проблема, я просто обновляю сервисы Google Play и убеждаюсь, что вы добавляете проект google-play-service-lib в качестве зависимости, теперь он работает без изменения кода, но я все еще получаю сообщение «Ресурсы сервисов Google Play не найдены. . Проверьте конфигурацию вашего проекта, чтобы убедиться, что ресурсы включены. " но это происходит только тогда, когда у вас установлен setMyLocationEnabled (true), кто-нибудь знает почему?
источник
Я не получил истинного решения, но решил его после следующих действий:
- Отметьте «Копировать проекты в рабочую область» при импорте google-play-services_lib
- Не устанавливайте minSdkVersion ниже 13
- Если у вас возникла ошибка с темой, попробуйте изменение темы макета на любую системную тему
- воссоздайте свой проект с нуля или верните все, если получите его откуда-то
источник
У меня такая же проблема, я просто установил Play Services из SDK, и все проблемы улетели.
источник
Я написал в деятельности
import com.google.android.gms.maps.SupportMapFragment;
и Eclipse дал мне красный значок> щелкните> исправить настройку проекта ..> добавить архив google-play-services.jar
И, наконец, это сработало !!
источник
Добавьте сервисы Google Play в свой проект
Чтобы сделать доступными для вашего приложения API сервисов Google Play:
следуйте инструкциям по этой ссылке: http://developer.android.com/google/play-services/setup.html#Setup
источник
Я столкнулся с этой проблемой при использовании Android SDK для x86 на 64-разрядной машине с Windows 7. Я загрузил 64-разрядную версию Android SDK, заставил Eclipse увидеть ее в Window> Preferences> Android> SDK location, и проблема перестала возникать.
источник
Пожалуйста, прочтите внимательно
Примечание. Не добавляйте два ключа в файл манифеста. Удалите ключ карты.
meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/google_maps_key"/>
добавьте этот код.
<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/auto_location"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
источник