Google 从按钮按下崩溃调用的地图布局

Google map layout called from button press crash

我正在尝试在 Android 应用程序中实施 Google Maps API。当 google 地图单独在应用程序中时,这工作得很好但是当我尝试通过从另一个布局点击按钮打开包含地图的布局时,它在该行崩溃:setContentView(R.layout.activity_maps) ;在 mapsactivity.java.

这里是调用地图布局的函数:

public void runSSH(View v) {

    Intent intent = new Intent(this, MapsActivity.class);
    startActivity(intent);
}

mapsactivity.java 是由 AndroidStudio 自动生成的,但我还是会把它放在这里:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}


@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}

这里是 Activitymaps.xml(也是自动生成的):

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.hosenbocus.azhar.droner.MapsActivity" />

我确实在清单和 google_maps_api.xml

中添加了 API 键
<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="MYKEY-AIzaSyCf0-a3jUzVrL4PJwCo1q6W60YTxu-U7F0" />
<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />




<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">
    AIzaSyCf0-a3jUzVrL4PJwCo1q6W60YTxu-U7F0
</string>

这是跟踪日志:

    03-10 14:47:20.937 22341-22341/com.hosenbocus.azhar.droner E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hosenbocus.azhar.droner/com.hosenbocus.azhar.droner.MapsActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
    at android.app.ActivityThread.access0(ActivityThread.java:150)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:213)
    at android.app.ActivityThread.main(ActivityThread.java:5225)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
    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:274)
    at android.app.Activity.setContentView(Activity.java:1895)
    at com.hosenbocus.azhar.droner.MapsActivity.onCreate(MapsActivity.java:20)
    at android.app.Activity.performCreate(Activity.java:5133)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316) 
    at android.app.ActivityThread.access0(ActivityThread.java:150) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:213) 
    at android.app.ActivityThread.main(ActivityThread.java:5225) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.RuntimeException: The API key can only be specified once. It is recommended that you use the meta-data tag with the name: com.google.android.geo.API_KEY in the <application> element of AndroidManifest.xml
    at maps.db.r.a(Unknown Source)
    at maps.cz.c.a(Unknown Source)
    at com.google.android.gms.maps.internal.CreatorImpl.b(Unknown Source)
    at com.google.android.gms.maps.internal.CreatorImpl.newMapFragmentDelegate(Unknown Source)
    at com.google.android.gms.maps.internal.d$a.onTransact(:com.google.android.gms.alldynamite:62)
    at android.os.Binder.transact(Binder.java:347)
    at com.google.android.gms.maps.internal.ah.b(:com.google.android.gms:179)
    at com.google.android.gms.maps.internal.CreatorImpl.b(:com.google.android.gms:100)
    at com.google.android.gms.maps.internal.ag.onTransact(:com.google.android.gms:62)
    at android.os.Binder.transact(Binder.java:347)
    at com.google.android.gms.maps.internal.zzc$zza$zza.zzs(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment$zzb.zzzW(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment$zzb.zza(Unknown Source)
    at com.google.android.gms.dynamic.zza.zza(Unknown Source)
    at com.google.android.gms.dynamic.zza.onInflate(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
    at android.support.v4.app.Fragment.onInflate(Fragment.java:1142)
    at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2287)
    at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
    at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
    at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31)
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:80)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:469) 
    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:274) 
    at android.app.Activity.setContentView(Activity.java:1895) 
    at com.hosenbocus.azhar.droner.MapsActivity.onCreate(MapsActivity.java:20) 
    at android.app.Activity.performCreate(Activity.java:5133) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316) 
    at android.app.ActivityThread.access0(ActivityThread.java:150) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:213) 
    at android.app.ActivityThread.main(ActivityThread.java:5225) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
    at dalvik.system.NativeStart.main(Native Method) 

请帮助我,我已经坚持了 2 天了。我是 android 开发的初学者,我可能错过了一些明显的东西。

提前致谢

问题是:

The API key can only be specified once. It is recommended that you use the meta-data tag with the name: com.google.android.geo.API_KEY in the <application> element of AndroidManifest.xml

瞬间

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="MYKEY-AIzaSyCf0-a3jUzVrL4PJwCo1q6W60YTxu-U7F0" />
<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />

仅使用

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />