entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Geolocation a webview en Android

Hola, tengo un webview y me gustaría que al ejecutar Android.getLocation() desde javascript me diera la localización del usuario mediante json , he hecho esto:

MainActivity.java

[...]
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.setContentView(R.layout.activity_main);

        this.myWebView = (WebView) this.findViewById(R.id.webView);
        myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");

        myWebView.loadUrl("file:///android_asset/example.html");

        WebSettings webSettings = myWebView.getSettings();
        webSettings.setDomStorageEnabled(true);
        webSettings.setDatabaseEnabled(true);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setGeolocationEnabled(true);

        myWebView.setWebViewClient(new MyWebViewClient());
    }
[...]

WebAppInterface.java

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.webkit.JavascriptInterface;
import org.json.JSONException;
import org.json.JSONObject;

public class WebAppInterface extends Activity {

    Context context;

    public WebAppInterface(Context context) {
        this.context = context;
    }
[...]
private LocationManager locManager;

    @JavascriptInterface
    public JSONObject getLocation() throws JSONException {
        locManager = (LocationManager) getSystemService(this.context.LOCATION_SERVICE); #Me da error en esta linea

        Location loc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        JSONObject location = new JSONObject();
        location.put("latitude", loc.getLatitude());
        location.put("longitude", loc.getLongitude());

        return location;
    }
[...]

Y obviamente he puesto los permisos
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
pero al ejecutar desde javascript me da error en la primera linea de getLocation() y no se el porque, aparentemente parece estar bien

1 Respuesta

1voto

LxDAndromeda Puntos2440

Cambia:

locManager = (LocationManager) getSystemService(this.context.LOCATION_SERVICE);

Por:

locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

0voto

xume comentado

Me sigue dando este error en la consola:

12-03 16:59:47.405      914-947/m2s.offl.nw.m2s W/System.err﹕ at m2s.offl.nw.m2s.WebAppInterface.getLocation(WebAppInterface.java:46)

y mas abajo este:

12-03 16:59:47.435      914-914/m2s.offl.nw.m2s I/chromium﹕ [INFO:CONSOLE(21)] "Uncaught Error: Error calling method on NPObject.", source: file:///android_asset/example.html (21)

0voto

LxDAndromeda comentado

Vale entonces intentemos sólo modificar así el LocationManager:

locManager = (LocationManager) this.getSystemService(this.context.LOCATION_SERVICE);

0voto

xume comentado

No, me dice que no puedo retornar un valor desde un método con resultado de tipo void

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta