Reputation: 89
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
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
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