При получении местоположения GPS загрузите другой URL - PullRequest
0 голосов
/ 22 сентября 2010

У меня небольшая проблема ... Я сделал приложение для Android, которое расширяет веб-просмотр. Html-страница веб-просмотра с картой, подобной этой: Пример карты , именно здесь я и получил свое вдохновение. Мой метод onCreate выглядит так:

super.onCreate(savedInstanceState);

         //Removes the title bar in the application
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setContentView(R.layout.main);

         //Creation of the Webview found in the XML Layout file
         browserView = (WebView)findViewById(R.id.webkit);

         //Removes both vertical and horizontal scroll bars 
         browserView.setVerticalScrollBarEnabled(false);
         browserView.setHorizontalScrollBarEnabled(false);


         myLocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
         //Enable Javascripts

         url = "http://www.my-homepage.dk/map_example.html";

         browserView.getSettings().setJavaScriptEnabled(true);


         //The website which is wrapped to the webview

         browserView.loadUrl(url);

Поэтому, когда Мое приложение получает местоположение GPS, оно вызывает этот метод:

LocationListener onLocationChange=new LocationListener() {


  public void onLocationChanged(Location location) {


 StringBuilder buf=new StringBuilder(url);

 buf.append("?");
 buf.append("lon=");
 buf.append(String.valueOf(location.getLongitude()));
 buf.append("&");
 buf.append("lat=");
 buf.append(String.valueOf(location.getLatitude()));

    browserView.loadUrl(buf.toString());

 }

Так что он в основном просто загружает другой URL .... Но моя проблема в том, что: 1. он сохраняет оригинальный веб-сайт как «изображение карты», я подумал, что это «разгрузит» страницу, и 2. когда второй URL-адрес загружен, это занимает довольно много времени, прежде чем он закончится, и когда я тестирую на своем HTC Desire, он иногда не показывает вторую загруженную страницу (карту с местоположением), прежде чем он выключает экран и блокирует, или если я иду и в приложении, это иногда тоже помогает ...

Надеюсь, вы можете помочь:)

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Предложение - в onLocationChanged, make locationFound(); первый оператор вместо последнего.

Было бы хорошо немедленно остановить слушатель, поскольку выполнение оператора loadUrl может занять некоторое время, пока поставщикможет отправлять больше обновлений.

0 голосов
/ 22 сентября 2010

Вот решение ... Слушатель GPS, по-видимому, вещает более одного раза;) поэтому, когда GPS находит местоположение, он загружает URL-адрес, а затем прекращает вещание.он отправил множество URL-адресов на html-страницу, и поэтому никогда не загружал только один URL-адрес.И я просто упростил onLocationChanged немного.

   public void locationFound(){

        myLocationManager.removeUpdates(this);

    }

        @Override
        public void onLocationChanged(Location location) {

            String lon = "lon="+String.valueOf(location.getLongitude());
            String lat = "lat="+String.valueOf(location.getLatitude());


            browserView.loadUrl(url+"?"+lon+"&"+lat);
            locationFound();
        }

Вот исходный код для приложения:

package com.webview;



import android.app.Activity;
import android.content.Context;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;




public class WebViewTest extends Activity implements LocationListener{

    private WebView browserView;
     private static String PROVIDER="gps";
     private LocationManager myLocationManager=null;
     private String url;
     private boolean LocFound = false;


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

         //Removes the title bar in the application
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setContentView(R.layout.main);

         //Creation of the Webview found in the XML Layout file
         browserView = (WebView)findViewById(R.id.webkit);

         //Removes both vertical and horizontal scroll bars 
         browserView.setVerticalScrollBarEnabled(false);
         browserView.setHorizontalScrollBarEnabled(false);


         myLocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
         //Enable Javascripts

         url = "http://www.test.dk/test.html";

         browserView.getSettings().setJavaScriptEnabled(true);


         //The website which is wrapped to the webview

        browserView.loadUrl(url);


          }

    @Override
    public void onResume() {
    super.onResume();
    myLocationManager.requestLocationUpdates(PROVIDER, 0,
    0,
    this);
    }

    @Override
    public void onPause() {
    super.onPause();
    myLocationManager.removeUpdates(this);
    }

    public void locationFound(){

        myLocationManager.removeUpdates(this);

    }

        @Override
        public void onLocationChanged(Location location) {

            String lon = "lon="+String.valueOf(location.getLongitude());
            String lat = "lat="+String.valueOf(location.getLatitude());


            browserView.loadUrl(url+"?"+lon+"&"+lat);
            locationFound();
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

    }
...