地理定位不适用于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

Android Studio:地理定位不起作用。无法在 Webview 中获取地理位置

android webview地理定位不起作用

Android webview html5地理定位