我正在尝试我的手和Android应用程序开发。我目前正在使用Eclipse(我不记得版本,无论最新版本是什么)。我越过了一座桥,在那里我似乎无法理解我做错了什么。我正在尝试使用Google Maps V2 API。我已经浏览了几个文档并尝试了几种技术,所有这些都导致了同样的错误:
Android.view.Inflate Exception: Binary XML file line #2: Error inflating class fragment
我一直在把钥匙砸到钥匙上2天,试图抓住我在这里做错了什么。
我做过的事情:
a library
。android-support-v4.jar
作为我项目的依赖项。我从类似于我的问题中尝试了很多不同的答案,但无济于事。 :( 我通常可以解决这些问题,但也许我太过分了。
eclipse中的我的包浏览器树看起来像
以下是代码:>
activity_main.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"
class="com.google.android.gms.maps.SupportMapFragment"/>
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testing.svma"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
<permission
android:name="com.testing.svma.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.testing.svma.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.testing.svma.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="SHA1_Generated_KEY_HERE" />
</application>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
</manifest>
MainActivity.java
package com.testing.svma;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
参考文件
我引用了This google maps quick start guide来创建我的项目。
我最初是以the sample code from the Introduction to the Google Maps Android V2 Api
一大堆SO问题。
所以,SO社区,我做错了什么?为什么我无法理解这个简单的概念。
提前谢谢。
答案 0 :(得分:31)
我知道这可能是一个死线程,但万一有人偶然发现这里遇到了同样的问题 - 你的清单可能缺少以下元信息:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
在<application>
元素中声明它,您的代码应该有效。我在跳过这一步的youtube教程之后遇到了同样的问题,只有仔细阅读原始的Google教程,我才注意到丢失的代码。
无论如何,希望这有助于某人。
答案 1 :(得分:23)
我有相同的代码/相同的问题!尝试在布局中将android:name =“com.testing.svma.MainActivity”添加到“fragment”!它解决了我的问题
<?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.SupportMapFragment"
android:name="com.testing.svma.MainActivity"/>
答案 2 :(得分:6)
我有同样的问题,通过修改清单来解决它。 这是我的表现。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="example.gps"
android:versionCode="1"
android:versionName="1.0" >
<permission
android:name="example.gps.permission.MAPS_RECEIVE"
android:protectionLevel="signature"></permission>
<!-- Copied from Google Maps Library/AndroidManifest.xml. -->
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="17"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<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"/>
<!-- My Location -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- Maps API needs OpenGL ES 2.0. -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<!-- End of copy. -->
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:hardwareAccelerated="true" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="<YOUR VALUE>"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name="example.gps.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>
</application>
</manifest>
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"
class="com.google.android.gms.maps.SupportMapFragment"
/>
java类是
public class MainActivity extends FragmentActivity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
这解决了我的问题
答案 3 :(得分:3)
尝试将google-play-services库引用添加到您的项目中。如果您使用的是Eclipse,则需要转到Project->Properties->Android
和Add
google-play-services库项目。
可替换地,
您可以手动修改project.properties
文件。
尝试添加对google_play_services库的引用。所以我的project.properties
文件看起来像:
# Project target.
target=android-17
android.library.reference.1=../../../android-sdks/extras/google/google_play_services/libproject/google-play-services_lib
在您的情况下,google-play-services lib的路径可能不同
我尝试导入你的代码,它也崩溃了。当我修改属性文件时 - 我已经运行了地图
答案 4 :(得分:2)
我花了很多时间试图解决这个问题,经过多次阅读和尝试,我通过改变
来解决
public class MainActivity extends FragmentActivity
这个
public class MainActivity extends android.support.v4.app.FragmentActivity
我希望这可以帮到你
答案 5 :(得分:2)
在几天的时间内尝试了所有上述答案,然后最终确实有效:
项目 - &gt;属性 - &gt; Android - &gt;项目构建目标
将项目构建目标更改为android 4.3(API 18)并单击“应用”
在清单中,我然后手动更改了min和target sdk版本:
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="18" />
现在匹配project.properties文件中的target=android-18
(由我们先做的项目构建目标更改产生)
我也尝试了android:minSdkVersion="11"
,因此targetSdkVersion
非常重要。
希望这有助于某人!
答案 6 :(得分:2)
问题通常在Manifest.xml
,所以请务必写下正确的权限,例如:
`
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zako.android.locationapi.maps"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
<permission
android:name="com.zako.android.locationapi.maps.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<!-- Required OpenGL ES 2.0. for Maps V2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<!-- Requires OpenGL ES version 2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.zako.android.locationapi.maps.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<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" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.zako.android.locationapi.maps.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="......" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
`
不要忘记<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
和<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
答案 7 :(得分:1)
我遇到了类似的错误,我认为它来自于这一点:当我添加Google Play服务API时,我不会将其复制到我的工作区中,而是使用原始版本!!!
注意:您应该引用复制到源树的库的副本 - 您不应该从Android SDK目录引用该库。
检查这一点。
答案 8 :(得分:1)
我有类似的问题,我通过右击project->tools>add support library
解决了...
和setup library
我希望这可以帮到你
答案 9 :(得分:1)
只需在onDestroy()
SupportMapFragment mapFragment = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map_location_sharing));
if(mapFragment != null) {
FragmentManager fM = getFragmentManager();
fM.beginTransaction().remove(mapFragment).commit();
它对我有用。也非常适合你。感谢
答案 10 :(得分:1)
我也有这个错误,这是由于外部允许。它没有任何意义,但我添加了这个权限,从那时起一切正常。
答案 11 :(得分:1)
我遇到了同样的问题,我错误地只添加了以下2个标签中的一个。
实际错误确实具有误导性,因为您可能会考虑一些API级别的UI问题。
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="<YOUR VALUE>"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
请注意,您也缺少其中一个
答案 12 :(得分:1)
在一些android 6.0手机中这个例外是bug 如果无法解决XML原因
android:hardwareAccelerated="true" adding in activity tag
然后它是android中的活动bug https://issuetracker.google.com/issues/35827842
这可以通过添加
来解决{{1}}
答案 13 :(得分:0)
使用两个元数据引用解决了我的问题:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="yourAPIkeyFromGoogleAPIConsole" />
答案 14 :(得分:0)
我只是添加了API密钥以实现清单,并且对它有所帮助