Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add Google Maps API V2 in a fragment

Tags:

I'm trying to show the map from the Google Maps API V2 in fragment. I tried with the SupportMapFragment, but I can't get the expected output. Also I'm a beginner on this platform! What I really want is just a way to put a map from the Google Maps API V2 for Android in a fragment. Please share your ideas and references.

Thanks in Advance !

like image 641
Seïfane Idouchach Avatar asked Jun 07 '13 07:06

Seïfane Idouchach


People also ask

What is MapFragment?

public class MapFragment extends Fragment. A Map component in an app. This fragment is the simplest way to place a map in an application. It's a wrapper around a view of a map to automatically handle the necessary life cycle needs.

What is OnMapReadyCallback?

public interface OnMapReadyCallback. Callback interface for when the map is ready to be used. Once an instance of this interface is set on a MapFragment or MapView object, the onMapReady(GoogleMap) method is triggered when the map is ready to be used and provides a non-null instance of GoogleMap .


2 Answers

Here is the code,

public class YourFragment extends Fragment {     // ...   static final LatLng HAMBURG = new LatLng(53.558, 9.927);           static final LatLng KIEL = new LatLng(53.551, 9.993);           private GoogleMap map;      public View onCreateView(LayoutInflater inflater, ViewGroup container,                              Bundle savedInstanceState) {          View v = inflater.inflate(R.layout.yourlayout, null, false);          map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map))             .getMap();  Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)                 .title("Hamburg"));             Marker kiel = map.addMarker(new MarkerOptions()                 .position(KIEL)                 .title("Kiel")                 .snippet("Kiel is cool")                 .icon(BitmapDescriptorFactory                     .fromResource(R.drawable.ic_launcher)));              // Move the camera instantly to hamburg with a zoom of 15.             map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));              // Zoom in, animating the camera.             map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);          //...          return v;     } 

Your layout,

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity" >      <fragment         android:id="@+id/map"         android:layout_width="match_parent"         android:layout_height="match_parent"         class="com.google.android.gms.maps.SupportMapFragment" />  </RelativeLayout> 

Make some changes in your manifest file also.Like,

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.myapp.android.locationapi.maps"     android:versionCode="1"     android:versionName="1.0" >      <uses-sdk         android:minSdkVersion="17"         android:targetSdkVersion="17" />      <permission         android:name="com.myapp.android.locationapi.maps.permission.MAPS_RECEIVE"         android:protectionLevel="signature" />      <uses-feature         android:glEsVersion="0x00020000"         android:required="true" />      <uses-permission android:name="com.myapp.android.locationapi.maps.permission.MAPS_RECEIVE" />     <uses-permission android:name="android.permission.INTERNET" />     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />     <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" />      <application         android:allowBackup="true"         android:icon="@drawable/ic_launcher"         android:label="@string/app_name"         android:theme="@style/AppTheme" >         <activity             android:name="com.myapp.android.locationapi.maps.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>          <meta-data             android:name="com.google.android.maps.v2.API_KEY"             android:value="your_apikey" />     </application>  </manifest>  
like image 146
Basim Sherif Avatar answered Sep 28 '22 11:09

Basim Sherif


public class DemoFragment extends Fragment {   MapView mapView; GoogleMap map; LatLng CENTER = null;  public LocationManager locationManager;  double longitudeDouble; double latitudeDouble;  String snippet; String title; Location location; String myAddress;  String LocationId; String CityName; String imageURL;  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {     // TODO Auto-generated method stub     View view = inflater                 .inflate(R.layout.fragment_layout, container, false);      mapView = (MapView) view.findViewById(R.id.mapView);         mapView.onCreate(savedInstanceState);    setMapView();    }   private void setMapView() {     try {         MapsInitializer.initialize(getActivity());          switch (GooglePlayServicesUtil                 .isGooglePlayServicesAvailable(getActivity())) {         case ConnectionResult.SUCCESS:             // Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT)             // .show();              // Gets to GoogleMap from the MapView and does initialization             // stuff             if (mapView != null) {                  locationManager = ((LocationManager) getActivity()                         .getSystemService(Context.LOCATION_SERVICE));                  Boolean localBoolean = Boolean.valueOf(locationManager                         .isProviderEnabled("network"));                  if (localBoolean.booleanValue()) {                      CENTER = new LatLng(latitude, longitude);                  } else {                  }                 map = mapView.getMap();                 if (map == null) {                      Log.d("", "Map Fragment Not Found or no Map in it!!");                  }                  map.clear();                 try {                     map.addMarker(new MarkerOptions().position(CENTER)                             .title(CityName).snippet(""));                 } catch (Exception e) {                     e.printStackTrace();                 }                  map.setIndoorEnabled(true);                 map.setMyLocationEnabled(true);                 map.moveCamera(CameraUpdateFactory.zoomTo(5));                 if (CENTER != null) {                     map.animateCamera(                             CameraUpdateFactory.newLatLng(CENTER), 1750,                             null);                 }                 // add circle                 CircleOptions circle = new CircleOptions();                 circle.center(CENTER).fillColor(Color.BLUE).radius(10);                 map.addCircle(circle);                 map.setMapType(GoogleMap.MAP_TYPE_NORMAL);              }             break;         case ConnectionResult.SERVICE_MISSING:              break;         case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:              break;         default:          }     } catch (Exception e) {      }  } 

in fragment_layout

<com.google.android.gms.maps.MapView                 android:id="@+id/mapView"                 android:layout_width="match_parent"                 android:layout_height="160dp"                                     android:layout_marginRight="10dp" /> 
like image 28
Vaishali Sutariya Avatar answered Sep 28 '22 11:09

Vaishali Sutariya