0

Here is my Activity code

package com.example1.heartconnect;

import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;


public class Maps extends FragmentActivity {

GoogleMap map;

@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
    setContentView(R.layout.maps);

    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.gmap)).getMap();
    map.setMyLocationEnabled(true);
    map.setMapType(map.MAP_TYPE_NORMAL);

    Location loc = map.getMyLocation();

    double lat = loc.getLatitude();
    double lon = loc.getLongitude();
    LatLng position = new LatLng(lat, lon);

    Marker marker = map.addMarker(new MarkerOptions()
    .title("Your Location")
    .icon(BitmapDescriptorFactory
         .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
    .position(position));

    map.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 10));


}
}

This is the XML file

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<fragment
      android:id="@+id/gmap"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:name="com.google.android.gms.maps.SupportMapFragment"/>
</LinearLayout>

And this is the Manifest file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example1.heartconnect"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />
<permission
    android:name="com.example1.heartconnect.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.example1.heartconnect.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/heart_connect"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <uses-library android:name="com.google.android.maps" />
    <activity
        android:name="com.example1.heartconnect.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>
    <activity android:name="MyCircle"></activity>
    <activity android:name="Validate"></activity>
    <activity android:name="DisplayContacts"></activity>
    <activity android:name="Maps"></activity>
    <receiver android:name=".SMSBroadcastReceiver">
        <intent-filter>
            <action android:name="android.provider.telephony.SMS_RECEIVED"></action>
        </intent-filter>
    </receiver>
    <meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />   
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDUFZIRGsVVpvJxHvjjoUV4G44-43JTnEw"/>  
</application>

</manifest>

When I remove these 2 lines and provide Latittude & Longitude manually, the app works and I'm able to see the bare Google Map with a marker at that LatLng

double lat = loc.getLatitude();
double lon = loc.getLongitude();

I've also tried to find the current location in following way :

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);

But the app crashes here too. Plz can anyone suggest me the modifications needed so that I can see my current location on the map... Thnxx in advance :)

Vishal Afre
  • 1,013
  • 3
  • 12
  • 39

2 Answers2

2

This is the code for getting current location on the map.

public class ShowMap extends FragmentActivity implements LocationListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_location_map);

        getMap();

  }
  public void getMap(){

      int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

        // Showing status
        if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
            dialog.show();

        }else { // Google Play Services are available

            // Getting reference to the SupportMapFragment of activity_main.xml
            SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
            // Getting GoogleMap object from the fragment
            googleMap = fm.getMap();

            // Enabling MyLocation Layer of Google Map
           googleMap.setMyLocationEnabled(true);
        }
    }


   @Override
   public void onLocationChanged(Location location) {
   // Getting latitude of the current location
   double latitude = location.getLatitude();

   // Getting longitude of the current location
   double longitude = location.getLongitude();

   // Creating a LatLng object for the current location
   LatLng latLng = new LatLng(latitude, longitude);

   // Showing the current location in Google Map
   googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

   // Zoom in the Google Map
   googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));


   }

   @Override
   public void onProviderDisabled(String arg0) {
      // TODO Auto-generated method stub

   }

   @Override
   public void onProviderEnabled(String arg0) {
       // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
       // TODO Auto-generated method stub

  }

and you need to import google play store into your project as a library. and add support v4 into your project like Right click your project -> select properties ->java build path -> select Libraries Tab -> click Add External JARs, and give path of your support v4 jar.

I am sure this step will help you.

Gulnaz Ghanchi
  • 485
  • 3
  • 14
  • Thanks for the reply.. I did exactly what you mentioned but when I run my code, I'm able to see just the google map and it doesn't take me to my location. And as the code is written in onLocationChanged method, is there any other way to display just the current location?? – Vishal Afre Sep 29 '14 at 12:52
  • Hey! Got the issue solved after importing android support v4 library... Thanks again – Vishal Afre Sep 29 '14 at 14:12
0

Location loc = map.getMyLocation(); didn't wait for your current location

See the example: http://developer.xamarin.com/recipes/android/os_device_resources/gps/get_current_device_location/

Also see this: http://developer.android.com/training/location/retrieve-current.html

QArea
  • 4,955
  • 1
  • 12
  • 22