我有一个asyncTask CommunicationThread
,它可以创建一些纬度和经度。我还有一个地图活动,我想在其中获取CommunicationThread
的结果,并基于这些结果更新标记。这是我的map活动的代码。
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private Thread2ThreadInfo connectionInfo;
@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);
connectionInfo = SubscriberActivity.getConnInfo();
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
Value currentPosition;
@Override
public void run() {
while(true) {
Log.e("start", "new thread");
CommunicationThread communicationThread = new CommunicationThread();
try {
currentPosition = communicationThread.execute(connectionInfo).get();
Log.e("start", currentPosition.toString());
LatLng templt = null;
double lat = currentPosition.getLatitude();
double lon = currentPosition.getLongtitude();
LatLng lt = new LatLng(lat, lon);
templt = lt;
MarkerOptions a = new MarkerOptions().position(lt).title(currentPosition.getBus().getBusLineId());
Marker m = mMap.addMarker(a);
mMap.moveCamera(CameraUpdateFactory.newLatLng(lt));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(templt, 13.0f));
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
}
CommunicationThread
工作正常,数据(位置)被发送到地图活动。我使用无限循环来执行CommunicationThread
任务,当新的位置可用时,获取它们。我还使用了一个处理程序,以避免在主线程中出现无限循环的问题。当我运行它时,数据被成功发送(根据循环中产生的日志),但映射如下所示:
当我在没有无限循环(只针对一个位置)的情况下运行它时,它可以正常运行。还有其他想法吗?
发布于 2019-06-02 00:17:07
你拿到谷歌地图api的密钥了吗?如果没有,则必须获取密钥才能在应用程序中使用google地图
请点击此链接Get an API Key
发布于 2019-06-02 00:21:18
1.接口密钥缺失、不正确或被禁用
似乎是最常见的。我推荐使用official documentation。如果你完成了所有步骤,问题仍然存在,但你仍然不确定这是否是原因,请克隆官方的android示例,找到MapWithMarker示例(android- samples /tutorials/MapWithMarker)并对其进行测试。如果您运行该示例并且它正确地显示了映射,请尝试将默认的API密钥交换为您拥有的API密钥。
在这种情况下,请确保您在Google API控制台中启用了它。
2.缺少Android GMS版本元数据标签
您的AndroidManifest.xml
需要定义以下元数据属性:
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
有关更多详细信息和官方文档,请参阅此处的答案。
3.缺少用户权限
在旧版本的Android SDK中,您必须显式设置某些用户权限才能正确使用Google Maps API,例如:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
现在不再是这样了,但我建议您访问官方文档,以确保您满足这些版本要求。
4. OpenGL ES版本2的要求
过去,似乎需要在AndroidManifest.xml
中指定以下元数据属性
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
https://stackoverflow.com/questions/56408322
复制相似问题