Willard
Willard

Reputation: 89

Unable to get longitude and latitude on my android device

I have an application that displays the GPS longitude and latitude. It works if i use the LocationManager.NETWORK_PROVIDER it display the longitude and latitude of the network. But when i use LocationManager.GPS_PROVIDER it does not display anything. But when i use google maps it can point where i am. What does google maps do to get my location? I need to get the Longitude and Latitude of my device.

Here is my code

import android.location.LocationManager;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity implements OnClickListener{

double glat;
double glng;


LocationListener glocListener;

TextView longitudetv;
TextView latitudetv;

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

    TextView tv = (TextView) findViewById(R.id.mytextview);
    tv.setVisibility(View.GONE);

    longitudetv = (TextView) findViewById(R.id.textView3);
    longitudetv.setVisibility(View.GONE);

    latitudetv = (TextView) findViewById(R.id.textView4);
    latitudetv.setVisibility(View.GONE);



    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

//This is for Lat lng which is determine by your device GPS
    public class MyLocationListenerGPS implements LocationListener  
    {
        @Override
        public void onLocationChanged(Location loc)
        {
            glat = loc.getLatitude();
            glng = loc.getLongitude();

            //Setting the GPS Lat, Lng into the textView

            longitudetv.setText("" + glng);
            latitudetv.setText("" + glat);


        }

        @Override
        public void onProviderDisabled(String provider)
        {

        }

        @Override
        public void onProviderEnabled(String provider)
        {

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras)
        {
        }
    }

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v.getId()==R.id.button1){
        LocationManager locman = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        TextView tv = (TextView) findViewById(R.id.mytextview);
        tv.setVisibility(View.VISIBLE);


        if(locman.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            tv.setText("Started!");
            latitudetv.setVisibility(View.VISIBLE);
            longitudetv.setVisibility(View.VISIBLE);
            locman   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            glocListener = new MyLocationListenerGPS();
            locman.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                1000 * 1,  // 1 Sec        
                       0, // 0 meter   
                       glocListener);

        }
        else{
            tv.setText("There is no GPS Connection");
            Toast.makeText( getApplicationContext(), "GPS is Disabled.Please enable GPS", Toast.LENGTH_SHORT ).show();

        }

    }

}



}

My manifest file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.willardcuizon.adaptivedgps"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<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" android:debuggable="false">
    <activity
        android:name="com.willardcuizon.adaptivedgps.Main"
        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>

Upvotes: 0

Views: 2407

Answers (3)

Steve Benett
Steve Benett

Reputation: 12943

yes i am inside my house, but even if i am inside my house i use google maps, the google maps application can still see my location

The problem is Google Maps is using the LocationClient, which is able to switch providers. If no GPS provider is reachable it will switch to a Network provider. The LocationManager isn't able to do this switch automatically. Therefor you have to handle this switching yourself or you use the LocationClient too, which would be the recommanded way. Here's the tutorial of the docs and inside your SDK is a sample code at yoursdk/extras/google/google_play_services/samples/maps which should help you how to use it.

Upvotes: 2

Dima
Dima

Reputation: 1510

Use Google Play Services, Location APIs

Upvotes: 1

rougebot
rougebot

Reputation: 104

First of all it is required that you use the permission to access GPS in you manifest file, here it is, if you haven't yet added

uses-permission android:name="android.permission.ACCESS_FINE_LOCATION

Now that you have this permission, next thing that I find missing is MyLocationListenerGPS should extend Service (since location is a service). You can check this link which explains in details how to implement it.

http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/

Upvotes: 1

Related Questions