Como faço para aumentar a precisão de localização do gps, no meu caso o teste que eu estou fazendo o endereço que o gps está dando é uma rua perto daqui, mais nao a rua que eu estou. alguém consegue me ajudar?
package br.teste;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;
public class WebViewActivity extends Activity {
/** Called when the activity is first created. */
LocationManager LM = null;
LocationListener locListener = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final WebView telaBrowser = (WebView)findViewById(R.id.webview);
Button b = (Button) findViewById(R.id.cliqueAqui);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean gps_enabled = false;
boolean network_enabled = false;
try {
gps_enabled = LM.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = LM.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
if (gps_enabled) {
LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
if (network_enabled) {
LM.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
}
});
telaBrowser.getSettings().setJavaScriptEnabled(true);
// telaBrowser.loadUrl("http://www.uol.com.br");
telaBrowser.loadUrl("file:///android_asset/script.html");
telaBrowser.getSettings().setJavaScriptEnabled(true);
telaBrowser.getSettings().setSaveFormData(true);
telaBrowser.getSettings().setBuiltInZoomControls(true);
telaBrowser.addJavascriptInterface(new JavaScriptInterface(this, telaBrowser, this), "Android");
WebViewClient client = new MyWebViewClient(this)
{
@Override
public void launchExternalBrowser(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
};
telaBrowser.setWebViewClient(client);
telaBrowser.setWebChromeClient(new MyWebChromeClient(this));
LM = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locListener = new LocListener();
}
public void teste() {
// turnGPSOn(true);
LM.removeUpdates(locListener);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setSpeedRequired(true);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String bestProvider = LM.getBestProvider(new Criteria(),true);
Location l = LM.getLastKnownLocation(bestProvider);
double latitude = l.getLatitude();
double longitude = l.getLongitude();
System.out.println(latitude + " - " + longitude);
Toast.makeText(this, latitude + " | " + longitude, Toast.LENGTH_LONG).show();
Toast.makeText(this, getAdress(l), Toast.LENGTH_LONG).show();
// turnGPSOn(false);
}
private void turnGPSOn(boolean ativar){
Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", ativar); //trocar para false para desabilitar
sendBroadcast(intent);
}
private String getAdress(Location location) {
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getCountryName());
}
String addressString = sb.toString();
return addressString;
} catch (IOException e) {
}
return "";
}
private class LocListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
teste();
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}