2015-10-14 194 views
7

我想使用Android Studio模擬器(Nexus 5)將頁面加載到Android應用程序webview中。但是,頁面未正確加載並卡在加載屏幕上。該頁面確實需要GeoLocation權限,但是我已經啓用了它們。Android Webview頁面無法正確加載頁面

下面是我的代碼和應用程​​序的XML。

MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    WebView webview; 
    setContentView(R.layout.activity_main); 
    webview = (WebView)findViewById(R.id.help_webview); 
    //webview use to call own site 

    webview.setWebViewClient(new WebViewClient()); 
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.getSettings().setDomStorageEnabled(true); 
    webview.getSettings().setAllowContentAccess(true); 
    webview.getSettings().setAllowFileAccess(true); 
    webview.getSettings().setAppCacheEnabled(true); 
    webview.getSettings().setAllowUniversalAccessFromFileURLs(true); 
    webview.getSettings().setAllowContentAccess(true); 
    webview.getSettings().setGeolocationEnabled(true); 
    webview.getSettings().setDatabaseEnabled(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("https://lit-citadel-6989.herokuapp.com"); 
} 

activity_main.xml中

<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/help_webview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scrollbars="none" 
    android:largeHeap="true" /> 

AndroidManifest.xml中

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.example.example" > 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.BLUETOOTH"/> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
    <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:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

UPDATE: 這是肯定的地理位置問題。我沒有gps.config文件。我似乎無法找到創建一個或我需要的具體方法。在網站上獲取位置的JavaScript是

navigator.geolocation.getCurrentPosition(function(location){ 
      setLatLng(location); 
      locationLoaded = true; 
      callback(lat,lng); 
}); 

我該如何在android中設置webview來傳遞用戶的當前位置?

+0

去從0提供明確的靜態緯度,經度值的JavaScript,其次打開默認的模擬器瀏覽器的頁面中看到它的行爲,如果有可能再嘗試得到一個設備,而不是模擬器或至少使用genymotion這些類型的因爲它更多的硬件依賴的東西..順便說一句,你可以粘貼全班的Java和JavaScript的代碼太 THX – Ahmad

回答

5

other users,它工作正常,的問題是,你是在測試此一個仿真器

爲了在仿真器上獲得可用的GPS /位置API,您可以使用geo fix命令。

您可以使用this GUI tool來伊斯利設置你的模擬器假的GPS位置。

有關geo fix命令的詳細的信息可以發現here

3

我實現onConsoleMessage方法(在WebChromeClient),看看發生了什麼事情,並得到了一個錯誤:使用這種方法

@Override 
public boolean onConsoleMessage(android.webkit.ConsoleMessage consoleMessage) { 
    Log("WebConsole: " + consoleMessage.message() + " [line:" + consoleMessage.lineNumber() + "]"); 
return true; 
} 

WebConsole: Uncaught SyntaxError: Unexpected token function [line:1] 
+1

我似乎沒有意識到了這個問題。我也不確定這個錯誤的原因是什麼。你能詳細說明嗎? – applecrusher