GVKun编程网logo

Google Map Android API V2应用程序崩溃(google map android app)

29

在本文中,我们将给您介绍关于GoogleMapAndroidAPIV2应用程序崩溃的详细内容,并且为您解答googlemapandroidapp的相关问题,此外,我们还将为您提供关于Android2.

在本文中,我们将给您介绍关于Google Map Android API V2应用程序崩溃的详细内容,并且为您解答google map android app的相关问题,此外,我们还将为您提供关于Android 2.3和Google Maps API v2、Android Google Map API V2 (key 申请)、Android Google Map API V2(显示地图)、Android Google Maps Api V2,获取当前地图中心的坐标的知识。

本文目录一览:

Google Map Android API V2应用程序崩溃(google map android app)

Google Map Android API V2应用程序崩溃(google map android app)

我使用的是Eclipse helios和Android
4.1.2,我已按照以下文档https://docs.google.com/document/pub?id=19nQzvKP-
CVLd7_VrpwnHfl-
AE9fjbJySowONZZtNHzw进行操作,并完全按照了教程中的描述进行了编码。我在模拟器上的应用程序显示“除非您更新Google
Play服务,否则该应用程序将无法运行”,但在实际设备(索尼Xperia)上它已更新了Google
Play服务的更新版本,并发出“应用程序已停止运行”的提示。欢迎提供帮助。

这是我的清单

  <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.emeterfinalapp"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="11"        android:targetSdkVersion="16" />      <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_CORSE_LOCATION" />    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>     <permission         android:name="com.example.emeterfinalapp.permission.MAPS_RECEIVE"         android:protectionLevel="signature"/><uses-permission  android:name="com.example.emeterfinalapp.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"/>    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >         <uses-library android:name="com.google.android.maps"/>        <activity            android:name="com.example.emeterfinalapp.EmeterMainActivity"            android:configChanges="orientation|keyboardHidden|screenSize"            android:label="@string/app_name"            android:theme="@style/FullscreenTheme" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name="com.example.emeterfinalapp.EnterLocationActivity"            android:label="@string/title_activity_enter_location"            android:parentActivityName="com.example.emeterfinalapp.EmeterMainActivity" >            <meta-data                android:name="android.support.PARENT_ACTIVITY"                android:value="com.example.emeterfinalapp.EmeterMainActivity" />        </activity>        <activity            android:name="com.example.emeterfinalapp.SelectLocation"            android:label="@string/title_activity_select_location"            android:parentActivityName="com.example.emeterfinalapp.EnterMainActivity" >            <meta-data                android:name="android.support.PARENT_ACTIVITY"                android:value="com.example.emeterfinalapp.EnterMainActivity" />         </activity>        </application> <meta-data   android:name="com.google.android.maps.v2.API_KEY"   android:value="my api key"/>    </manifest>

这是我的main.xml

    <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=".SelectLocation" >    <Button        android:id="@+id/satellite_button"        android:layout_width="250dp"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_alignParentTop="true"        android:layout_toRightOf="@+id/mapview_button"        android:text="@string/satellitebuttontext" />        <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:layout_below="@+id/satellite_button"/>        <LinearLayout android:id="@+id/zoom"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignParentBottom="true"         android:layout_centerHorizontal="true"         />        <Button            android:id="@+id/mapview_button"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"            android:layout_alignParentTop="true"            android:text="@string/mapbuttontext" /></RelativeLayout>

这是我的活动

    package com.example.emeterfinalapp;        import android.os.Bundle;        import android.support.v4.app.FragmentActivity;        import com.google.android.gms.common.GooglePlayServicesUtil;        import com.google.android.gms.maps.GoogleMap;        import com.google.android.gms.maps.SupportMapFragment;        public class SelectLocation extends FragmentActivity  {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_select_location);        // Show the Up button in the action bar.        getActionBar().setDisplayHomeAsUpEnabled(true);                                           GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());        GoogleMap map = ((SupportMapFragment)          getSupportFragmentManager().findFragmentById(R.id.map)).getMap();    }}

我给我的项目提供了google_play_services
lib的引用,在我的lib中添加了google_play_service和android.support.v4
jar文件。如果我仍然缺少任何内容,请指导…。

我有我最明显添加的api密钥,请参见上面对其进行编辑…

amd这是我电话记录中的错误跟踪

  I/ActivityManager(  282): Displayed com.example.emeterfinalapp/.EmeterMainActivity:                +206ms     I/ActivityManager(  282): Displayed com.example.emeterfinalapp/.EnterLocationActivity:      +224ms     W/InputDispatcher(  282): channel ''2c3dbfd0      com.example.emeterfinalapp/com.example.emeterfinalapp.EmeterMainActivity (server)'' ~           Consumer closed input channel or an error occurred.  events=0x8     E/InputDispatcher(  282): channel ''2c3dbfd0      com.example.emeterfinalapp/com.example.emeterfinalapp.EmeterMainActivity (server)'' ~      Channel is unrecoverably broken and will be disposed!     W/InputDispatcher(  282): Attempted to unregister already unregistered input channel      ''2c3dbfd0 com.example.emeterfinalapp/com.example.emeterfinalapp.EmeterMainActivity      (server)''     W/InputDispatcher(  282): channel ''2c504fb8      com.example.emeterfinalapp/com.example.emeterfinalapp.EnterLocationActivity (server)'' ~      Consumer closed input channel or an error occurred.  events=0x8     E/InputDispatcher(  282): channel ''2c504fb8      com.example.emeterfinalapp/com.example.emeterfinalapp.EnterLocationActivity (server)'' ~      Channel is unrecoverably broken and will be disposed!     W/InputDispatcher(  282): Attempted to unregister already unregistered input channel      ''2c504fb8 com.example.emeterfinalapp/com.example.emeterfinalapp.EnterLocationActivity      (server)''

答案1

小编典典

o …经过长时间的摸索,我终于找到了解决方案,我按照DDMS的文档进行了操作,使用DDMS在真实设备上进行了调试,然后发现了以下错误

12-12 15:08:29.458: E/AndroidRuntime(26382): java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.example.emeterfinalapp/com.example.emeterfinalapp.SelectLocation}:     android.view.InflateException: Binary XML file line #17: Error inflating class fragment

再经过几行代码后,又出现了另一个错误

12-12 15:08:29.458: E/AndroidRuntime(26382): Caused by: java.lang.RuntimeException: API key not found.  Check that <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml

然后我意识到我的api密钥代码是清单错误的子项,而不是上面错误指出的应用程序,然后我将清单更正为

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.emeterfinalapp"android:versionCode="1"android:versionName="1.0" ><uses-sdk    android:minSdkVersion="11"    android:targetSdkVersion="16" />  <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_CORSE_LOCATION" /><uses-feature android:glEsVersion="0x00020000" android:required="true"/> <permission     android:name="com.example.emeterfinalapp.permission.MAPS_RECEIVE"     android:protectionLevel="signature"/><uses-permission  android:name="com.example.emeterfinalapp.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"/><application    android:allowBackup="true"    android:icon="@drawable/ic_launcher"    android:label="@string/app_name"    android:theme="@style/AppTheme" >     <uses-library android:name="com.google.android.maps"/>    <activity        android:name="com.example.emeterfinalapp.EmeterMainActivity"        android:configChanges="orientation|keyboardHidden|screenSize"        android:label="@string/app_name"        android:theme="@style/FullscreenTheme" >        <intent-filter>            <action android:name="android.intent.action.MAIN" />            <category android:name="android.intent.category.LAUNCHER" />        </intent-filter>    </activity>    <activity        android:name="com.example.emeterfinalapp.EnterLocationActivity"        android:label="@string/title_activity_enter_location"        android:parentActivityName="com.example.emeterfinalapp.EmeterMainActivity" >        <meta-data            android:name="android.support.PARENT_ACTIVITY"            android:value="com.example.emeterfinalapp.EmeterMainActivity" />    </activity>    <activity        android:name="com.example.emeterfinalapp.SelectLocation"        android:label="@string/title_activity_select_location"        android:parentActivityName="com.example.emeterfinalapp.EnterMainActivity" >        <meta-data            android:name="android.support.PARENT_ACTIVITY"            android:value="com.example.emeterfinalapp.EnterMainActivity" />    </activity>     <meta-data   android:name="com.google.android.maps.v2.API_KEY"   android:value="my api key"/></application>

然后就像变焦一样,一切都工作得非常完美…使用真实设备进行调试很有帮助…

Android 2.3和Google Maps API v2

Android 2.3和Google Maps API v2

今天,我尝试使用适用于Android 2.3.3的Google Maps api v2我的步骤:

  • 从debug.keystore获得SHA1代码
  • 在Google API控制台中创建一个新项目
  • 注册一个新的ID
  • 启用了Google Maps android api v2
  • 使用输入SHA1创建一个Android密钥; it.mappe(it.mappe是我的包)
  • 获取API密钥
  • 更新AndroidManifest文件:
        <permission android:name="it.mappe.permission.MAPS_RECEIVE" android:protectionLevel="signature" />    <uses-permission android:name="it.mappe.permission.MAPS_RECEIVE" />    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />    <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"/>    <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.maps.v2.API_KEY"            android:value="MY_KEY" />            <activity                android:name="it.mappe.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>
  • 我的主要活动
        public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }   
  • 我的activity_main:

    <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_SDK_DIR/extras/google/google_play_services/libproject/google-play-services_lib到项目的根目录

  • 添加/extras/android/compatibility/v4/android-support-v4.jar为外部罐

  • 将下一行添加到 YOUR_PROJECT/project.properties android.library.reference.1=google-play-services_lib

当我在三星银河S上运行它(使用Google Play服务apk)时,它崩溃并且logcat显示此错误

    E/AndroidRuntime(6435): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{it.mappe/it.mappe.MainActivity}:     android.view.InflateException: Binary XML file line #2: Error inflating class fragment        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)        at android.app.ActivityThread.access$1500(ActivityThread.java:117)        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)        at android.os.Handler.dispatchMessage(Handler.java:99)        at android.os.Looper.loop(Looper.java:123)        at android.app.ActivityThread.main(ActivityThread.java:3687)        at java.lang.reflect.Method.invokeNative(Native Method)        at java.lang.reflect.Method.invoke(Method.java:507)        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)        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:581)        at android.view.LayoutInflater.inflate(LayoutInflater.java:386)        at android.view.LayoutInflater.inflate(LayoutInflater.java:320)        at android.view.LayoutInflater.inflate(LayoutInflater.java:276)        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:209)        at android.app.Activity.setContentView(Activity.java:1657)        at it.mappe.MainActivity.onCreate(MainActivity.java:12)        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)        ... 11 more     Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/it.mappe-2.apk]        at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)        at java.lang.ClassLoader.loadClass(ClassLoader.java:551)        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)        at android.view.LayoutInflater.createView(LayoutInflater.java:471)        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)        ... 19 more

一些建议?

编辑

这是我的main.xml:

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"        android:id="@+id/map"        android:layout_width="match_parent"        android:layout_height="match_parent"/>

答案1

小编典典

<fragment> 应该全部小写。

另外,您正在使用Activity(不是FragmentActivity)与SupportMapFragment,并且我怀疑该组合是否有效。

Android Google Map API V2 (key 申请)

Android Google Map API V2 (key 申请)

    

     要使用V2 的API,需要到Google APIs Console将Google Maps Android API v2服务开启(前提是你已经拥有Google帐号,并创建一个项目),见图:

 

然后用keystore 的SHA1 加package申请API key,


填入SHA1和包名(用包名前缀,这样可以给多个应用使用)

申请成功的KEY


至此API key 申请完成,接下来就可以进行Google Map 的开发了。

Android Google Map API V2(显示地图)

Android Google Map API V2(显示地图)

        检查Android SDK ,确保Google Play service已经安装,现象见图:

                    

开发的应用要支持2.2+导入Froyo的工程,支持3.1+的,使用第二个。Google Map Lib 的工程位于 ~/android Sdk/extras/google/,选择合适的工程导入eclipse。


创建自己的工程,然后将上面的工程作为库,引进来


AndroidManifest.xml的配置

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

    <uses-sdk android:minSdkVersion="8" />
  
    <!-- permission  -->
    <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"/>

    <!-- OpenGL ES 2 -->
    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        
        <activity
            android:name="com.sample.app.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>
        
        <!-- Google Map V2 key -->
        <meta-data
    		android:name="com.google.android.maps.v2.API_KEY"
    		android:value="API_KEY"/>
        
    </application>

</manifest>


布局文件:

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

Activity

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.activity_main);
		
		
	}
}


执行结果:


Android Google Maps Api V2,获取当前地图中心的坐标

Android Google Maps Api V2,获取当前地图中心的坐标

我正在使用 Android Google Maps Api V2(不是MapView或MapActivity),我很难获得地图中心的坐标.

我在考虑使用

@Override
public void onCameraChange(CameraPosition arg0) {
    // Todo Auto-generated method stub
    geoCodeCenter(/*Location object*/);
}

但我无法从CameraPosition对象获取lat / long.相机也有更多的尺寸,因为你现在也可以看到不同间距的地图,所以获得纬度/经度的中心是不一样的,因为用户不能保证从鸟瞰图看地图,除非某些手势被禁用.

有一个更好的方法吗?我不希望用户长时间点击标记将其拖动到地图上,我希望他们只需知道用户平移地图中心的位置.

map.getMyLocation()方法用于其他内容,例如当前的LocationProvider位置.尽管我使用GPS并且它仍然返回null,但也看似不是选项

解决方法

but I can’t get the lat/long from the CameraPosition object

根据我对文档的阅读,CameraPosition上的target public data member是地图中心的LatLng.

今天关于Google Map Android API V2应用程序崩溃google map android app的分享就到这里,希望大家有所收获,若想了解更多关于Android 2.3和Google Maps API v2、Android Google Map API V2 (key 申请)、Android Google Map API V2(显示地图)、Android Google Maps Api V2,获取当前地图中心的坐标等相关知识,可以在本站进行查询。

本文标签: