Геолокация не может быть загружена на веб-просмотр - PullRequest
1 голос
/ 01 мая 2011

Я хочу загрузить Geolocation в свое веб-представление на Android 2.1. Геолокация хорошо работает в моем браузере, но не работает в веб-просмотре.

public class WebPageLoader extends Activity implements GeolocationPermissions.Callback{

    WebView webview;
    String geoWebsiteURL = "http://hngu.naf.cs.hut.fi/current_location.html";
    public WebPageLoader() {
    }

    /**
     * Called with the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        webview = (WebView) findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webview.getSettings().setGeolocationEnabled(true);  //seems like if i set this, the webview should prompt when I call navigator.geolocation.getCurrentPosition
        GeoClient geo = new GeoClient();
        webview.setWebChromeClient(geo);        
        String origin = ""; //how to get origin in correct format?
        geo.onGeolocationPermissionsShowPrompt(origin, this);  //obviously not how this is meant to be used but expected usage not documented
        webview.loadUrl(geoWebsiteURL);        

    }

    public void invoke(String origin, boolean allow, boolean remember) {

    }

    final class GeoClient extends WebChromeClient {

    @Override
    public void onGeolocationPermissionsShowPrompt(String origin,
    Callback callback) {
    // TODO Auto-generated method stub
    super.onGeolocationPermissionsShowPrompt(origin, callback);
    callback.invoke(origin, true, false);
    }

    }

    }

Мой манифест.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="net.Webview_Android"
      android:versionCode="1"
      android:versionName="1.0">

    <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" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION" />
    <uses-library
        android:name="com.google.android.maps" />  
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
    <uses-sdk android:minSdkVersion="7" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".WebPageLoader"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Когда я запускаю приложение. Он отображает карту Google с маркером. Тем не менее, он не может найти текущее местоположение, хотя мой HTML-файл работает хорошо. Пожалуйста, помогите мне. Большое вам спасибо.

1 Ответ

3 голосов
/ 24 февраля 2012
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  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(origin, true, false);
      }
  });
  webview.loadUrl(geoWebsiteURL);                    
}

работает для меня.

Я использую разрешения:

<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" />

Обратите внимание, что в эмуляторе Android вы должны установить местоположение с помощью geo fix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...