Android Manifest 未向 Google Maps 提供 API 密钥

Posted

技术标签:

【中文标题】Android Manifest 未向 Google Maps 提供 API 密钥【英文标题】:Android Manifest is not giving Google Maps the API key 【发布时间】:2017-05-29 05:57:45 【问题描述】:

我不断收到此错误:

未找到 API 密钥。检查 是否在 androidManifest.xml 的元素中

当我的地图活动试图膨胀活动的片段时。

有人遇到过这个问题吗?

在我的字符串文件中:

<string name="google_api_key" translatable="false" templateMergeStrategy="preserve">an api key that i got from google here</string>

我试过了

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

并直接在字段中键入密钥:

<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="an api key that i got from google here"/>

我也试过了:

    清理缓存 使缓存失效并重新启动 通过 XML 检查器运行我的所有 XML 文件以进行验证。

MapActivity.java

public class MapActivity extends AppCompatActivity 
    private static final String MAP_COORDS = "com.mycompany.myapp.map_coordinates";
    public static final int MAP_REQUEST_CODE = 453;

    private MyObject myObject;

    public static Intent newIntent(Context packageContext, MyObject myObject) 
        Intent intent = new Intent(packageContext, MapActivity.class);
        Bundle bundle = new Bundle();
        bundle.putParcelable(MAP_COORDS, myObject);
        intent.putExtras(bundle);
        return intent;
    


    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
    

MapActivity.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context="com.mycompany.myapp.Views.MasterDetails.MapActivity">
    <fragment
        android:id="@+id/map"
        android:name="com.mycompany.myapp.Views.MasterDetails.MapFragment"
        android:layout_
        android:layout_/>

</RelativeLayout> 

在我的 Gradle 依赖项中

compile 'com.google.android.gms:play-services-maps:7.8.0'
compile 'com.google.android.gms:play-services-location:7.8.0'

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

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

【问题讨论】:

相对于&lt;application&gt; 元素,那些&lt;meta-data&gt; 元素在哪里? Application 元素内部,Activity 声明的正上方。 【参考方案1】:

首先,API_KEY 应该在“application”标签下(如下)并确保您的 API_KEY 有效,您应该在Developer Console 中启用“Places API for Android”,而不仅仅是“Places API”。

<application
    android:name=...>

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

 ...
</application>

另外,我不知道您的 MapActivity,但启动 PlacePickerActivity 的正确方法是这样的:

科特林:

val builder = PlacePicker.IntentBuilder()
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST)

还有 Java:

PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try 
    startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);

catch (GooglePlayServicesRepairableException e) 
    e.printStackTrace();

catch (GooglePlayServicesNotAvailableException e) 
    e.printStackTrace();

希望这些帮助之一,干杯!

【讨论】:

以上是关于Android Manifest 未向 Google Maps 提供 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章

Android manifest之manifest标签详细介绍

uilabel 视图未向右对齐

包裹别名未向 tslint 注册

Android manifest文件中的标签详细介绍

找不到 manifest-merger.jar (com.android.tools.build:manifest-merger:26.0.1)

Android MANIFEST.MF 等效项