清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yu.lbs"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library android:name="com.google.android.maps" />
<activity
android:name="com.yu.lbs.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:apiKey=".........."
android:clickable="true"
android:enabled="true" />
</LinearLayout>
MainActivity.java:
import android.os.Bundle;
import android.view.Menu;
import com.google.android.maps.MapActivity;
public class MainActivity extends MapActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
可以启动活动。但在MapView中没有任何东西。可以显示小网格的地图,我认为它带有MapView,但没有加载地图。可能有什么不对?我使用的是Google API v3。但是这段代码来自使用API v1的教科书。
答案 0 :(得分:46)
我解决了我的方式,我不得不这样做:
final MapView mapView = (MapView)fragmentView.findViewById(R.id.map_fieldLocation);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng coordinates = new LatLng(match.match.LocationLatitude, match.match.LocationLongitude);
googleMap.addMarker(new MarkerOptions().position(coordinates).title(match.match.LocationAddress));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 15));
mapView.onResume();
}
});
我缺少的重要部分是您必须在致电onCreate()
之前调用getMapAsync()
方法,并且在调用回调后,您需要在onResume()
上调用MapView
{1}}对象。
这完全解决了我。
这是你自己班上的样子:
public class MainActivity extends MapActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (getView() != null) {
final MapView mapView = (MapView)getView().findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng coordinates = new LatLng(match.match.LocationLatitude, match.match.LocationLongitude);
googleMap.addMarker(new MarkerOptions().position(coordinates).title(match.match.LocationAddress));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 15));
mapView.onResume();
}
}
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
希望这有帮助!
答案 1 :(得分:1)
我猜你正在试图实施的谷歌地图版本搞得一团糟。 根据您使用的代码,您似乎正在尝试使用Google Maps API V1。
问题在于,您现在无法为Google Map API V1生成新的API密钥,此版本已弃用且Google不会为其提供新密钥。
从评论中可以看出,在API控制台中,您没有激活正确的API。 请查看此博客文章,了解如何为适用于Android的Google Map API V2 生成API密钥:
接下来,请阅读以下指南以在您的应用程序中实现此版本:
答案 2 :(得分:0)
在Android中使用Map API V2进行谷歌地图。访问此link可能会对您有所帮助。
它比旧版本更好,也更容易。
答案 3 :(得分:0)
根据documentation(截至今天),您需要将生命周期回调转发到MapView。
一种更清洁的方法是使用LifecycleObserver。
当将地图放置在活动或片段中时,此方法有效。
您不会得到onLowMemory()
或onSaveInstanceState()
,但仍可以将其转发到MapView。
这是一个Kotlin示例。
import android.content.Context
import android.util.AttributeSet
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.OnLifecycleEvent
import com.google.android.gms.maps.MapView
class MyMapView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : MapView(context, attrs, defStyle), LifecycleObserver {
init {
if(context is LifecycleOwner) {
context.lifecycle.addObserver(this)
}
}
//Your code here
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun create() {
onCreate(null)
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun start() {
onStart()
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun resume() {
onResume()
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun pause() {
onPause()
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stop() {
onStop()
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun destroy() {
onDestroy()
}
}