在Android Webview中的navigator.geolocation.getCurrentPosition()中获取“位置信息不可用”错误

问题描述 投票:0回答:1

我目前正在使用android studio为android构建一个webview应用程序。我要包装在Webview中的网站实现了一个简单的地理位置系统,该系统可以跟踪用户的当前位置并存储纬度和经度。

我能够在桌面浏览器和移动浏览器中获得期望的结果,但在Webview中却无法获得期望的结果。我在其他论坛上尝试了一些解决方案,但是似乎没有任何解决方案。

我也尝试过this。我尝试了解决方案,但没有用。

该项目是在AngularJS 1.4.8中构建的。我没有使用任何类似ionic或framework7的框架。要获取位置,我使用了HTML5地理位置。

我的AngularJS代码以获取当前位置(在浏览器中可以正常运行:] >>

$scope.getLocation = function () {
        if(navigator.geolocation){
                navigator.geolocation.getCurrentPosition(showPosition, showError);
                //alert("work");

            } else { 
                x.innerHTML = "Geolocation is not supported by this browser.";
                alert("Geolocation is not supported by this browser");
            }
        }

         function showPosition(position) {
            alert("position");
               var latitude_val ,longitude_val ;
               latitude_val = position.coords.latitude ;
               longitude_val = position.coords.longitude ;
               alert("lat"+latitude_val + "lon"+longitude_val)
            }

            function showError(error) {
                var error;
                switch(error.code) {
                    case error.PERMISSION_DENIED:
                    error = "User denied the request for Geolocation."
                    break;
                    case error.POSITION_UNAVAILABLE:
                    error = "Location information is unavailable."
                    break;
                    case error.TIMEOUT:
                    error = "The request to get user location timed out."
                    break;
                    case error.UNKNOWN_ERROR:
                    error = "An unknown error occurred."
                    break;
                }

                alert(error);
            }

Android Studio代码(MainAcivity.java)

public class MainActivity extends AppCompatActivity {

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    setContentView(R.layout.activity_main);

    webView =(WebView)findViewById(R.id.webview);
    webView.setWebViewClient(new WebViewClient());

    WebSettings webSettings = webView.getSettings();

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setGeolocationEnabled(true);
    webView.getSettings().setGeolocationDatabasePath( getFilesDir().getPath() );

    // HTML5 API flags
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setDatabaseEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);


    webView.setWebChromeClient(new WebChromeClient() {
        public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            callback.invoke(origin, true, false);
        }
    });



    webView.loadUrl("https://my.url");

}


@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    }
    else {
        super.onBackPressed();
    }
}

Android清单权限

<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" />

似乎position参数始终为null,但我不知道为什么。

我目前正在使用android studio为android构建一个webview应用程序。我要包装在Webview中的网站实现了一个简单的地理位置系统,该系统可以跟踪当前...

android webview geolocation android-webview
1个回答
0
投票

根据Android 6(API 23)或更高版本的documentation,您需要实现运行时权限。

© www.soinside.com 2019 - 2024. All rights reserved.