嗯,下面是我的例子,我在Android中有一个主要活动,我已经创建了一个工具栏,并且有一个名为location的子函数,我将在这里调用一些位置函数。 它是在片段中编码的,因为我在单击工具栏中的图标后进入子函数时需要创建一个片段。
我有如何在活动中显示谷歌地图。但是我没有在片段中显示它。 我能做的就是在片段内调用onActivityCreated。但是,虽然程序工作正常,但布局会省略工具栏。(我不擅长英语,如果你不明白我在说什么,请问我详细说明:))
那么有没有人可以帮我弄清楚如何调用一些谷歌定位服务,如找到png和lat,或在片段中显示谷歌地图?我的片段代码如下:
LocationFragment.java:
public class LocationFragment extends MapFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View location_layout = inflater.inflate(R.layout.location_layout, container, false);
return location_layout;
}
}
答案 0 :(得分:1)
您的片段类将是:
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 ,Google上有 the reference 。
对于用户的位置,需要进行一些阅读,只是为了了解更多信息: 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:请勿忘记在您的画面中添加许可。
我希望,我清楚地回答,这将是有用的 快乐的编码!