Reputation: 5073
I am stuck in a problem to get the lat and long in android device. have a look at my code as follows:-
public NewLocationActivity(final Context mContext) {
locationManager = (LocationManager) mContext
.getSystemService(Context.LOCATION_SERVICE);
locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateLocation(location);
mSharedPreferences=mContext.getSharedPreferences(HomeSAFEPref.HomeSAFELocationPref,Context.MODE_PRIVATE);
SharedPreferences.Editor prefEditor=mSharedPreferences.edit();
String latitude=String.valueOf(currentLatitude);
String longitude=String.valueOf(currentLongitude);
String heading=String.valueOf(currentheading);
String horizAccuracy=String.valueOf(currenthorizAccuracy);
prefEditor.putString("Latitude", latitude);
prefEditor.putString("Longitude", longitude);
prefEditor.putString("Heading", heading);
prefEditor.putString("HorizAccuracy", horizAccuracy);
prefEditor.commit();
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
};
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
void updateLocation(Location location) {
currentLocation = location;
this. currentLatitude = currentLocation.getLatitude();
this. currentLongitude = currentLocation.getLongitude();
geoField=new GeomagneticField(
Double.valueOf(location.getLatitude()).floatValue(),
Double.valueOf(location.getLongitude()).floatValue(),
Double.valueOf(location.getAltitude()).floatValue(),
System.currentTimeMillis()
);
this.currentheading=geoField.getInclination();
this.currenthorizAccuracy=currentLocation.getAccuracy();
this.speed=(int) currentLocation.getSpeed();
}
When i creating the object of class NewLocationActivity constructor works .But my problem is that UpdateLocation method does not runs.Why I dont know...But some times in other devices it runs perfectly and i get the lat and long easily.Please let me know why i am getting the lat and long 0,0.Thanks in advance..
Upvotes: 1
Views: 287
Reputation: 1534
use this code :it gets lat ,long from ur internet.u can also use gps for getting lat ,long .it is accurate but wont work inside building or may be in some devices because of their receiving capacity.the best way is to use both and write the condition that if gps lat,long is null go for wifi
public class NewLocationActivity extends Activity implements LocationListener {
private LocationManager locationManager;
/**
* Called when the activity is first created.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.digitalsignature);
getLocation();
}
public String[] getLocation()
{
String[] locationArray=new String[2];
locationManager = (LocationManager) DigitalSignatureActivity.this.getSystemService(LOCATION_SERVICE);
// getting network status
boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
// The minimum distance to change Updates in meters
final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates in milliseconds
final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
Location location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
locationArray[0] = String.valueOf(location.getLatitude());
locationArray[1] = String.valueOf(location.getLongitude());
}
}
}
return locationArray;
}
/**
* Stop using location listener
* Calling this function will stop using location updates in your app
* */
public void stopUsingLocationUpdates(){
if(locationManager != null){
locationManager.removeUpdates(DigitalSignatureActivity.this);
}
}
@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
}
@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
}
}
also in manifest declare like this
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Upvotes: 1