地理定位不适用于webview android
Posted
技术标签:
【中文标题】地理定位不适用于webview android【英文标题】:Geolocation not working on webview android 【发布时间】:2013-07-17 14:08:45 【问题描述】:我正在尝试创建一个应用程序,它可以在其中找到用户的位置并在地图上显示他的位置。我已阅读有关此问题的其他文章和建议的解决方案,但对我没有任何帮助。此 Web 应用程序在浏览器(移动设备和 PC)中运行良好,但是当我尝试将其作为应用程序堆栈运行在 html 文件的 javascript 中时。我认为这是javascript中的权限问题。这是这个项目的代码。
JAVA 代码
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.GeolocationPermissions;
public class MainActivity extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setGeolocationEnabled(true);
webview.setWebChromeClient(new WebChromeClient()
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)
// callback.invoke(String origin, boolean allow, boolean remember);
callback.invoke(origin, true, false);
);
webview.loadUrl("file:///android_asset/www/geoMap.html");
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="gr.######.navigator"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<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" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
HTML
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.0rc1.js"></script>
<script>
jQuery(window).ready(function()
$("#btnInit").click(function()
alert('click button');
initiate_geolocation();
);
);
function initiate_geolocation()
alert('function initiate_geolocation');
navigator.geolocation.getCurrentPosition(handle_geolocation_query,handle_errors);
function handle_errors(error)
alert('function handle_errors');
switch(error.code)
case error.PERMISSION_DENIED: alert("user did not share geolocation data");
break;
case error.POSITION_UNAVAILABLE: alert("could not detect current position");
break;
case error.TIMEOUT: alert("retrieving position timed out");
break;
default: alert("unknown error");
break;
function handle_geolocation_query(position)
alert('function handle_geolocation_query');
alert('Lat: ' + position.coords.latitude +
' Lon: ' + position.coords.longitude);
</script>
</head>
<body>
<div>
<button id="btnInit" >Find my location</button>
</div>
</body>
</html>
我已经花了几个小时从网络上搜索和尝试建议,但没有任何效果。如果有人对此问题有更多了解,请提供帮助。
非常感谢。
【问题讨论】:
或许可以看到:***.com/questions/11280946/… 我已经放了这段代码,但是什么也没发生。还是不行。 我有同样的问题...... getCurrentPosition 的回调永远不会被调用。还不知道如何解决。 嘿,你找到解决办法了吗? 【参考方案1】:兄弟,我也遇到了同样的问题,我通过添加以下几行来解决。希望你也会
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
【讨论】:
我试过了,但是成功或失败回调没有触发。以上是关于地理定位不适用于webview android的主要内容,如果未能解决你的问题,请参考以下文章
Javascript地理定位不适用于更新的android chrome
Phonegap 2.5.0 地理定位不适用于 android 4.0.4
电容器 - 地理定位不适用于 iOS,但适用于 Android