你片段類將是:
public class MyFragment extends Fragment {
private MapView mapView;
private GoogleMap map;
private Bundle bundle;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_map, container, false);
// initialize it to avoid a NPE
try {
MapsInitializer.initialize(getActivity());
} catch (GooglePlayServicesNotAvailableException e) { }
mapView = (MapView) v.findViewById(R.id.map);
mapView.onCreate(bundle);
// check if the map is null
if (map == null) {
map = ((MapView) v.findViewById(R.id.map)).getMap();
}
// add a marker
map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Here!"));
return v;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bundle = savedInstanceState;
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onDestroy() {
mapView.onDestroy();
super.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
}
最後,你的佈局fragment_map:
<com.google.android.gms.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
他我們去在片段內顯示你的地圖!請參閱a little post以及the reference來自Google。
對於用戶的位置,需要一點閱讀才能知道更多關於它的信息:Location Strategies(仔細閱讀,一切都在那裏)。你需要一個Location Manager
和一個Location Listener
。
首先,你需要這樣實現:
// The implement
implements LocationListener { [...] }
有了這個監聽器,你就能夠擁有並通過GPS或網絡更新設備的位置。不要忘了測試設備的服務的狀態,這樣的事情:
// Getting Google Play availability status
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
下面這段代碼是這個例子中的一個片段內的當前位置:
public class LocationFragment extends Fragment implements LocationListener {
private Marker marker;
private LocationManager locationManager;
static final LatLng NEWYORK = new LatLng(40.75, -74.03);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View v = inflater.inflate(R.layout.location_layout, container, false);
// ...
if (map == null) {
map = ((MapView) v.findViewById(R.id.map)).getMap();
}
// ...
if (map != null) initMap();
locationManager = (LocationManager) getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
getGPS();
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 10, this);
}
// ...
return v;
}
@Override
public void onResume() {
super.onResume();
getGPS();
}
@Override
public void onPause() {
super.onPause();
outGPS();
}
public void getGPS() {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this);
}
public void outGPS() {
locationManager.removeUpdates(this);
}
@Override
public void onLocationChanged(final Location location) {
// get the latitude and the longitude
final StringBuilder msg = new StringBuilder("lat : ");
msg.append(location.getLatitude());
msg.append("; lng : ");
msg.append(location.getLongitude());
// display it on a toast
Toast.makeText(getActivity().getApplicationContext(), msg.toString(), Toast.LENGTH_SHORT).show();
// final latlng with these above to update the position on a marker
final LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 1));
marker.setPosition(latLng);
// ...
}
@Override
public void onProviderDisabled(final String provider) {
if("gps".equals(provider)) {
desabonnementGPS();
}
}
@Override
public void onProviderEnabled(final String provider) {
if("gps".equals(provider)) {
abonnementGPS();
}
}
@Override
public void onStatusChanged(final String provider, final int status, final Bundle extras) { }
private void initMap() {
gMap.addMarker(new MarkerOptions().title("New-York").position(NEWYORK));
marker = gMap.addMarker(new MarkerOptions().title("I am here!").position(new LatLng(0, 0)));
}
}
然後創建經理,然後使用onLocationChanged
方法更新當前位置。有一些很好的教程:a tutorial by Vogella(這可能是幫助)和another tutorial(也可以幫助你)。
您對this blog不少小費。非常簡單,非常全面。
注意2:不要忘記在您的清單中添加權限。
我希望,我回答清楚,這將是有益的。
快樂編碼!
嘿弗洛,謝謝你的建議。 但我想創建一個片段內的地圖視圖,說我已創建一個片段類,所以它應該是一個onCreateView方法,而不是的onCreate,因爲它是一個片段並不是一項活動... –
酷!我看到了,我根據自己的需要更新了答案。讓我知道這是否有幫助。 – Fllo
謝謝你!有用!! –