带有 API KEY 的 Google Maps V2 Android 显示为空白
Posted
技术标签:
【中文标题】带有 API KEY 的 Google Maps V2 Android 显示为空白【英文标题】:Google Maps V2 Android with API KEY showing blank 【发布时间】:2019-10-18 06:32:37 【问题描述】:我正在尝试向我的应用程序添加地图视图,但地图显示空白屏幕,我搜索了这个问题并添加了我需要的所有权限和 API 密钥,但仍然空白。 这是我的地图代码
<com.google.android.gms.maps.MapView
android:id="@+id/map"
android:layout_
android:apiKey="-----------------------------------"
android:layout_
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="20dp"/>
这是 onCreateView 中的 java 代码(我使用的是片段)
mapview = (MapView) view.findViewById(R.id.map);
mapview.onCreate(savedInstanceState);
mapview.getMapAsync(this);
和
@Override
public void onMapReady(GoogleMap googleMap)
GoogleMap map = googleMap;
map.getUiSettings().setMyLocationButtonEnabled(false);
if (ActivityCompat.checkSelfPermission(this.getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this.getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
return;
map.setMyLocationEnabled(true);
GeoPoint location = user.getLocation();
LatLng pos;
if(location == null) pos = new LatLng(41.8919300, 12.5113300);
else pos = new LatLng(location.getLatitude(), location.getLongitude());
map.addMarker(new MarkerOptions().position(pos)
.title("Ti trovi qui"));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(pos,10f));
mapview.onResume();
这是我的清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.diy.yourself">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<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" />
<permission
android:name="com.diy.yourself.permissions.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.diy.yourself.permissions.MAPS_RECEIVE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
<activity
android:name="com.diy.yourself.SignInActivity"
android:label="Sign In"></activity>
<activity android:name="com.diy.yourself.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.diy.yourself.SignUpActivity" />
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="-----------------------------------------"/>
<uses-library android:name="com.google.android.maps"/>
<activity android:name="com.diy.yourself.ConditionsActivity" />
</application>
</manifest>
Google Maps for Android API 已启用,我使用的密钥是由 Firebase 自动生成的用于其他 API 的密钥,调试器未显示任何错误。
有人可以帮忙吗? 提前谢谢?????????
【问题讨论】:
您使用的是物理设备还是模拟器。检查您是否对 android 应用程序施加了任何限制。随意聊天。 【参考方案1】:在 XML 中使用此代码
<?xml version="1.0" encoding="utf-8"?>
<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_
android:layout_
tools:context=".MapsActivity" />
这个定义代码
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
【讨论】:
我的地图在一个片段内,不是片段本身。 getSupportFragmentManager 给了我“无法解析的方法”【参考方案2】:您必须将此元数据添加到您的清单中
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="----------------------------"/>
xml不需要添加apiKey。所以从MapView
中删除这一行
android:apiKey="-----------------------------------"
并在您的片段中添加这一行
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
【讨论】:
不会抛出任何错误但地图仍然显示空白? 抱歉迟到了,但我已经暂停了我的项目,我完全忘了回答这个问题。不,这并没有解决我的问题。它在 getMapAsync 上引发错误,该错误是在 null 对象上调用的。以上是关于带有 API KEY 的 Google Maps V2 Android 显示为空白的主要内容,如果未能解决你的问题,请参考以下文章
google maps js v3 api教程 -- 创建一个地图
带有 OpenWeatherMap 平铺层叠加的 Google Maps Javascript API
需要将新的Google Maps API KEY添加到我现有的Drupal7网站