2013-08-10 3 views
0

У меня есть приложение для Android, которое использует веб-представление. Веб-просмотр работает хорошо, за исключением JS, который использует getCurrentPosition для поиска пользователя. Я прочитал об этой проблеме и понимаю, что мне нужно иметь правильные разрешения, и что мне также нужно установить setJavaScriptEnabled(true);. Я сделал это, но у меня все еще много проблем с моим Android-приложением. Иногда приглашение, запрашивающее разрешение на получение местоположения пользователя, даже не появляется. Может ли кто-нибудь помочь мне исправить это? Я включил соответствующий файл Java, разрешения от моего manifest.xml и JS, который получает местоположение пользователя. Любая помощь будет замечательной!GeoLocation в Android Webview


Вот мой Java файл:

package com.website.appname; 

import android.app.Activity; 
//OTHER IMPORTS HERE 

class MyClient extends WebChromeClient { 

    @Override 
    public void onGeolocationPermissionsShowPrompt(String origin, 
      Callback callback) { 
     callback.invoke(origin, true, false); 
    } 
} 

public class locationPage extends Activity { 
    WebView webView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.embed); 
     webView = (WebView) findViewById(R.id.webview); 
     webView.setWebViewClient(new WebViewClient()); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     webView.requestFocus(View.FOCUS_DOWN); 
     webView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 

     webView.loadUrl("http://www.website/page.php"); 
     webView.setWebChromeClient(new MyClient()); 
     @SuppressWarnings("unused") 
     class HelloWebViewClient extends WebViewClient { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 
    } 
} 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
      webView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
} 
} 

Вот разрешения в моем манифесте:

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

А вот веб-страница, которая загружается вид сверху:

<script> 

     if(navigator.geolocation) { 
      // Call getCurrentPosition with success and failure callbacks 
      navigator.geolocation.getCurrentPosition(success, fail); 
     } 
     else { 
      alert("Sorry, your browser does not support geolocation services."); 
     } 

     function success(position) { 
      // GeoPosition Object 
      window.location = "another_page.php?user_lat=" + position.coords.latitude 
      + "&user_lon=" + position.coords.longitude + "&accuracy=" + 
      position.coords.accuracy; 
     } 
     function fail() { 
      // Could not obtain location 
     } 


</script> 

<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 

P.S. Я также пробовал смотреть на такие вещи, как android webview geolocation, которые были полезны, но моя проблема все еще сохраняется. Спасибо!

ответ

0

Похоже, что геолокация синхронизируется до позиции, которую я создал. Попробуйте установить период ожидания, чтобы отсрочить период ожидания по умолчанию.

navigator.geolocation.getCurrentPosition(success, 
             fail, 
             {timeout:60000});