应用程序在启动GoogleMaps FragmentActivity时崩溃

时间:2014-03-01 17:14:33

标签: java android google-maps android-fragments

我遇到以下问题: 当我按下按钮时,我的主要活动开始FragmentActivity,这意味着使用Google库来显示以第一个活动传递的坐标为中心的地图。 现在,我在FragmentActivity中添加了一些Log.i行,似乎调用了它的onCreate方法,并且在尝试设置活动的ContentView时发生崩溃。 这是我调用FragmentActivity的代码块,名为ShowMap:

mbtMap.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v){
            Intent aprimappa = new Intent(MyCoordinates.this,ShowMap.class);
            Bundle catasta = new Bundle();
            catasta.putDouble("lat", Lati);
            catasta.putDouble("lon", Longi);
            aprimappa.putExtras(catasta);
            Log.i(TAG, "Intento preparato. Chiamo ShowMap.");
            startActivity(aprimappa);
        }
    });

这是我的第一部分

ShowMap.class:

public class ShowMap extends FragmentActivity{

final static String TAG="thereyouwere";

private GoogleMap googlemap;

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Log.i(TAG, "Siamo nell'onCreate di ShowMap.");
    setContentView(R.layout.activity_show_map);
    Log.i(TAG,"Caricato layout di ShowMap.");
    Bundle b = getIntent().getExtras();
    double lat=b.getDouble("lat");
    double lon=b.getDouble("lon");

如果您需要它,这里也是我的AndroidManifest.XML

的xml布局

ShowMap:

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


<!-- Google Maps API Key -->
<meta-data
 android:name="com.google.android.maps.v2.API_KEY"
 android:value="***********************" />

<permission
    android:name="it.paquito.thereyouwere.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<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-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="it.paquito.thereyouwere.MyCoordinates"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
     </activity>
     <activity android:name="ShowMap"></activity>
 </application>

 </manifest>

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

提前感谢您提供给我的任何帮助!

1 个答案:

答案 0 :(得分:0)

首先将Maps API密钥放在<application>

中的manifest.xml标记下
 ....<application>
 <meta-data
 android:name="com.google.android.maps.v2.API_KEY"
 android:value="***********************" />
 </application>

您可能需要进行此更改,因为minsdkversion<12和较低版本(pre Honeycomb)设备使用了SupportMapFragment ..

您应该使用SupportMapFragment代替MapFragment更改

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment1"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />

使用

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

同时更改

 _googleMap=((MapFragment)getFragmentManager().findFragmentById(R.id.fragment1)).getMap();

使用

_googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
    R.id.fragment1)).getMap(); 

并检查

将Google Play服务版本添加到您应用的清单

您只需将<meta-data>标记下的<application>添加到AndroidManifest.xml

....<application>
 <meta-data android:name="com.google.android.gms.version"  
 android:value="@integer/google_play_services_version" />
 </application>

这是因为最新的Google Play服务需要一个版本名称,使用<meta-data .. />内的AndroidManifest.xml来提及