2015-10-14 4 views
7

Я пытаюсь загрузить страницу в веб-приложение приложения Android с помощью эмулятора Android Studio (Nexus 5). Однако страница загружается неправильно и застревает на экране загрузки. Для этой страницы требуются разрешения GeoLocation, но я уже включил их.Страница веб-просмотра Android-сайта не правильно загружается

Ниже приведен мой код и 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); 
}); 

Как я могу затем настроить WebView в андроиде, чтобы передать текущее местоположение пользователя?

+0

0 from 0 предоставляют явные статические значения lat, lng для javascript, во-вторых, откройте страницу в браузере эмулятора по умолчанию, посмотрите, как она себя ведет, если возможно, тогда попытайтесь получить устройство вместо эмулятора или по крайней мере используйте genymotion для этих типов вещи, так как его больше зависит от аппаратного обеспечения. Кстати, вы можете вставить весь класс java и код javascript тоже thx – Ahmad

ответ

5

Есть other users, используя этот подход, и он прекрасно работает, проблема заключается в том, что вы тестируете это на эмулятор.

Для получения рабочего API GPS/Location на эмуляторе вы можете использовать команду 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

Смежные вопросы