У меня есть приложение для Android, которое использует веб-представление. Веб-просмотр работает хорошо, за исключением JS, который использует getCurrentPosition для поиска пользователя. Я прочитал об этой проблеме и понимаю, что мне нужно иметь правильные разрешения, и что мне также нужно установить setJavaScriptEnabled(true);
. Я сделал это, но у меня все еще много проблем с моим Android-приложением. Иногда приглашение, запрашивающее разрешение на получение местоположения пользователя, даже не появляется. Может ли кто-нибудь помочь мне исправить это? Я включил соответствующий файл Java, разрешения от моего manifest.xml и JS, который получает местоположение пользователя. Любая помощь будет замечательной!GeoLocation в Android Webview
Вот мой Java файл:
package com.website.appname;
import android.app.Activity;
//OTHER IMPORTS HERE
class MyClient extends WebChromeClient {
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
Callback callback) {
callback.invoke(origin, true, false);
}
}
public class locationPage extends Activity {
WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.embed);
webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.requestFocus(View.FOCUS_DOWN);
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
});
webView.loadUrl("http://www.website/page.php");
webView.setWebChromeClient(new MyClient());
@SuppressWarnings("unused")
class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
Вот разрешения в моем манифесте:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
А вот веб-страница, которая загружается вид сверху:
<script>
if(navigator.geolocation) {
// Call getCurrentPosition with success and failure callbacks
navigator.geolocation.getCurrentPosition(success, fail);
}
else {
alert("Sorry, your browser does not support geolocation services.");
}
function success(position) {
// GeoPosition Object
window.location = "another_page.php?user_lat=" + position.coords.latitude
+ "&user_lon=" + position.coords.longitude + "&accuracy=" +
position.coords.accuracy;
}
function fail() {
// Could not obtain location
}
</script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
P.S. Я также пробовал смотреть на такие вещи, как android webview geolocation, которые были полезны, но моя проблема все еще сохраняется. Спасибо!