текущее местоположение Android webview не работает для версии kitkat

#android #webview #location #android-4.4-kitkat

#Android #webview #Расположение #android-4.4-kitkat

Вопрос:

Я использую webview в своем приложении. В этом я не могу получить текущее местоположение.

Я дал разрешения в манифесте

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  

в методе onCreate моего класса activity у меня есть

 webView = (WebView) findViewById(R.id.webview);
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setGeolocationEnabled(true);

webView.setWebChromeClient(new PQChromeClient());
  

и в моем методе PQChromeClient ()

  @Override
    public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) {
        super.onGeolocationPermissionsShowPrompt(origin, callback);

        //TODO: temporary commented
        requestPermission();
        turnGPSOn();
        callback.invoke(origin, true, false);
    }


   private void requestPermission(){

    if (ActivityCompat.shouldShowRequestPermissionRationale(MySocialNetworkActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)){

        Toast.makeText(MySocialNetworkActivity.this,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show();

    } else {

        ActivityCompat.requestPermissions(MySocialNetworkActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE);
    }
}

private void turnGPSOn(){
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(!provider.contains("gps")){
        //if gps is disabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3"));
        sendBroadcast(poke);
    }
}
  

Этот код работает для lollipop и marshmallow, но не для kitkat.
Недавно я обновил свою Android studio с 2.15 до 2.2. Создает ли это обновление какие-либо проблемы?

Ответ №1:

Оно должно поддерживаться, поскольку KitKat уже использует WebView на основе Chromium. В любом случае, это может дать вам подсказку: https://developer.chrome.com/multidevice/webview/overview Вам следует проверить версию пакета WebView в Play Store на устройстве, чтобы узнать, обновлена ли она, так как, возможно, вы используете старую версию на этом конкретном устройстве.