簡體   English   中英

帶有HTML 5地理位置的Android Webview

[英]Android Webview with HTML 5 geolocation

我正在使用webview加載Web應用程序。 在我加載的頁面中,我使用HTML 5地理位置API來檢測用戶位置。 這適用於所有瀏覽器,目前可以在iOS應用程序中使用。 出於某種原因,我無法在Android webview中使用它。 當我運行下面的代碼時,我在堆棧跟蹤中看到此消息:

[INFO:CONSOLE(24)]“未捕獲的ReferenceError:未定義PageMethods”,來源:[腳本的URL](24)

再次,這在瀏覽器中運行良好。

    package bar.krowd.krowdapp;

    import android.graphics.Color;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.webkit.GeolocationPermissions;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;

    public class MainActivity extends AppCompatActivity {

    private WebView KrowdView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();

        KrowdView = (WebView) findViewById((R.id.activity_main_webview));

        WebSettings ws = KrowdView.getSettings();
        ws.setJavaScriptEnabled(true);
        ws.setGeolocationEnabled(true);


        KrowdView.setWebViewClient(new WebViewClient());
        KrowdView.setWebChromeClient(new GeoWebChromeClient());

        KrowdView.setBackgroundColor(Color.BLACK);
        KrowdView.loadUrl([I AM PUTTING THE URL HERE]);
}


@Override
public void onBackPressed() {
    // Pop the browser back stack or exit the activity
    if (KrowdView.canGoBack()) {
        KrowdView.goBack();
    }
    else {
        super.onBackPressed();
    }
}

public class GeoWebChromeClient extends WebChromeClient {
    @Override
    public void onGeolocationPermissionsShowPrompt(String origin,
                                                   GeolocationPermissions.Callback callback) {
        // Always grant permission since the app itself requires location
        // permission and the user has therefore already granted it
        callback.invoke(origin, true, false);
    }
}

}

我的AndroidManifest.xml中列出了以下內容:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

這似乎是一個錯誤,我解決了它在app build.gradle中將targetSdkVersion從23降級到21

添加這個:

webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM