6

ich dieses Tutorial gefolgt: http://android-er.blogspot.com/2013/03/embed-google-map-in-webview.htmlEmbedded Google Map kann nicht aktuellen Standort in WebView bekommen

Ich versuche, nur die Google Map in der WebView zu verwenden, aber es kann meine aktuelle Position nicht bekommen. Ich habe JavaScript im WebView aktiviert. Was muss ich noch aktivieren?

Weiß jemand, warum das sein könnte? Sollte es mich nicht veranlassen, meinen derzeitigen Standort zu benutzen?

Beachten Sie, dass ich kein MapView als Alternative wie auch immer interessiert. Ich versuche herauszufinden, was ich im WebView oder vielleicht in den Standortdiensten des Geräts einstellen muss.

+0

Ernsthaft? Niemand sonst ist auf dieses Problem gestoßen? – user5243421

+0

Hallo Darren Ich lief auf das gleiche Problem und @ Kumait Lösung hat es behoben. Sie sollten die gleiche Lösung versuchen und wenn es funktioniert, akzeptieren Sie es als die Antwort. – MediumOne

Antwort

2

Sie sollten die Web-Ansicht erlauben Zugriff auf Ihren Standort durch die Methode onGeolocationPermissionsShowPrompt wie folgt überschrieben:

webView.setWebChromeClient(new WebChromeClient(){ 

     @Override 
     public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { 
      callback.invoke(origin, true, false); 
     } 
    }); 
0

Sie würden android.permission.ACCESS_FINE_LOCATION und android.permission.INTERNET ermöglichen haben,

erstellen LocationManager Instanz und LocationListener Instanz

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
LocationListener locationListener = new MyLocationListener(); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener); 

und onLocationChanged(Location loc) Methode hinzufügen, die haben es in Ihrem loc die Länge und Breite erzeugen (String long = loc.getLongitude(); String lat = loc.getLatitude();

)

und jetzt long, lat benutzen, um Ihrezu erzeugenString und weiterhin die WebView

generieren Sie diese für ref verwenden: http://www.rdcworld-android.blogspot.in/2012/01/get-current-location-coordinates-city.html

+0

Ich denke nicht, dass ich das klar gemacht habe, aber die Verbindung, die ich zur Verfügung gestellt habe, sollte von Anfang an funktionieren. Für mein spezifisches Problem erstelle ich eine mobile Website, die das JavaScript Google Maps-API verwendet, sodass ich keine Kontrolle über das native WebView habe. – user5243421

1

Auf API 5.x und unten, werden Sie

brauchen
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

in Ihrem AndroidManifest.xml.

Um Berechtigungen für Geolocation auf API 6.0+ zuzulassen, müssen Sie jedoch request the permission at runtime.

Request location permission

Um dies zu tun,

private String mGeolocationOrigin; 
private GeolocationPermissions.Callback mGeolocationCallback; 

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

    // other setup 

    myWebView.setWebChromeClient(new MyWebChromeClient()); 
} 

private WebChromeClient mWebChromeClient = new WebChromeClient() { 
    @Override 
    public void onGeolocationPermissionsShowPrompt(String origin, 
                GeolocationPermissions.Callback callback) { 
     // Geolocation permissions coming from this app's Manifest will only be valid for devices with API_VERSION < 23. 
     // On API 23 and above, we must check for permission, and possibly ask for it. 
     final String permission = Manifest.permission.ACCESS_FINE_LOCATION; 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || 
       ContextCompat.checkSelfPermission(MainActivity.this, permission) == PackageManager.PERMISSION_GRANTED) { 
      // we're on SDK < 23 OR user has already granted permission 
      callback.invoke(origin, true, false); 
     } else { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) { 
       // user has denied this permission before and selected [/] DON'T ASK ME AGAIN 
       // TODO Best Practice: show an AlertDialog explaining why the user could allow this permission, then ask again 
      } else { 
       // ask the user for permissions 
       ActivityCompat.requestPermissions(MainActivity.this, new String[] {permission}, RP_ACCESS_LOCATION); 
       mGeolocationOrigin = origin; 
       mGeolocationCallback = callback; 
      } 
     } 
    } 
} 

verwenden und erhält das Ergebnis:

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case RP_ACCESS_LOCATION: 
      boolean allow = false; 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // user has allowed these permissions 
       allow = true; 
      } 
      if (mGeolocationCallback != null) { 
       mGeolocationCallback.invoke(mGeolocationOrigin, allow, false); 
      } 
      break; 
    } 
} 

in Ihrer Tätigkeit.

Verwandte Themen