开发者

When Getting GPS Location, load another URL

I have a little problem... I have made an Android application which extends the webview. The webview Html page with a map on like this: Map example, it was also here I got my inspiration. My onCreate method looks like this:

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);

So when My application gets a GPS location, it invokes this method:

LocationListener onLocationChange=new LocationListener() {
 
 
  public void onLocationChanged(Location location) {
 
 
 StringBuilder b开发者_运维技巧uf=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());
 
 }

So it basically just loads another URL.... But, my problem is, 1. it keeps the orignal website "map image", i imagined it would "unload" the page, and 2. When the second url is loaded, it takes quite a long time before it is finished, and when i am testing on my HTC Desire, it sometimes doesnt show the second loaded page (the map with location) before it turns the screen off and lock, or if i go out and in the application, that sometimes helps too...

Hope you can help :)


A suggestion - in onLocationChanged, make locationFound(); the first statement instead of the last.

It would be good to stop the listener immediately, as the loadUrl statement could take some time to complete, while the provider could be sending more updates.


Here is the solution... The GPS listener apparently broadcast more than once ;) so, when the GPS finds a location it loads the url and then stops broadcasting.

So the problem before was, that it sent loads of URL's to the html page, and therefore never just loaded 1 single url. And i just simplified the onLocationChanged a bit.

   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();
        }

Here is the SourceCode for the application:

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

        }

    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜