我目前正在使用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 6(API 23)或更高版本的documentation,您需要实现运行时权限。