android webview откройте приложение google maps


У меня есть android Web view, и он отображает сайт правильно, но когда я нажимаю ссылку с данными гео я получаю следующую ошибку: "webiste недоступен сайт geo: 48.9596430, 9.125670?q=48.959630, 9.125670 не удалось загрузить "

Net:: ERR_UNKNOWN_URL_SCHEME

Когда я открываю тот же сайт в браузере chrome, он открывает мои карты google с нужными координатами.. теперь я думаю, почему мой webview этого не делает :S

Вот код webiew:

public class MainActivity extends Activity {

    /**
     * WebViewClient subclass loads all hyperlinks in the existing WebView
     */
    public class GeoWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // When user clicks a hyperlink, load in the existing WebView
            view.loadUrl(url);
            return true;
        }
    }

    /**
     * WebChromeClient subclass handles UI-related calls
     * Note: think chrome as in decoration, not the Chrome browser
     */
    public class GeoWebChromeClient extends WebChromeClient {
        @Override
        public void onGeolocationPermissionsShowPrompt(String origin,
                                                       GeolocationPermissions.Callback callback) {
            // Always grant permission since the app itself requires location
            // permission and the user has therefore already granted it
            callback.invoke(origin, true, false);
        }
    }

    WebView mWebView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webView);
        // Brower niceties -- pinch / zoom, follow links in place
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.getSettings().setBuiltInZoomControls(true);
        mWebView.setWebViewClient(new GeoWebViewClient());
        // Below required for geolocation
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setGeolocationEnabled(true);
        mWebView.setWebChromeClient(new GeoWebChromeClient());

        mWebView.loadUrl("http://www.bda-bawue.de");
    }



    @Override
    public void onBackPressed() {
        // Pop the browser back stack or exit the activity
        if (mWebView.canGoBack()) {
            mWebView.goBack();
        }
        else {
            super.onBackPressed();
        }
    }

И эта ссылка должна быть открыта:

<a href="geo:48.959630, 9.125670?q=48.959630, 9.125670">

Разрешения:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Должен ли я изменить ссылку для веб-просмотра android или в чем смысл?

2 2

2 ответа:

Может быть, это помощь.

@Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // When user clicks a hyperlink, load in the existing WebView
            if(url.contains("geo:")) {
                Uri gmmIntentUri = Uri.parse(url);
                Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
                mapIntent.setPackage("com.google.android.apps.maps");
                if (mapIntent.resolveActivity(getPackageManager()) != null) {
                      startActivity(mapIntent);
                }
            return true;
        }  
            view.loadUrl(url);
            return true;
        }
if(url.contains("https://www.google.com/maps/"))
{
  Uri IntentUri = Uri.parse(url);
  Intent mapIntent = new Intent(Intent.ACTION_VIEW, IntentUri);
  mapIntent.setPackage("com.google.android.apps.maps");

  if (mapIntent.resolveActivity(getPackageManager()) != null) {
     startActivity(mapIntent);
  }
  return true;
 }