I am working on a j2me application which contain a class to find the location of mobile using GPS.I need to include gauge while the location provider API is called and it finds the location.I am new to j2me so still not clear with all the concepts.I am pasting my code below.Please help me through this.Thanks in advance..

package org.ets.utils;
import javax.microedition.lcdui.*;
import javax.microedition.location.*;
import javax.microedition.io.*;
import java.io.*;
import org.ets.midlet.ETS_infozech;
import javax.microedition.midlet.*;


public class Locfinder  {






public Locfinder(ETS_infozech midlet)
{
    this.midlet = midlet;


}

public static String ex()
    {

        try {


                     checkLocation();
                    } catch (Exception ex)
                    {
                        ex.printStackTrace();

        }
        //System.out.println(string);
        return string;

    }

public static void  checkLocation() throws Exception
{

    Location l;
    LocationProvider lp;
    Coordinates c;
    // Set criteria for selecting a location provider:
    // accurate to 500 meters horizontally
    Criteria cr= new Criteria();
    cr.setHorizontalAccuracy(500);

    // Get an instance of the provider
   lp= LocationProvider.getInstance(cr);

    //Request the location, setting a one-minute timeout
    l = lp.getLocation(60);
    c = l.getQualifiedCoordinates();



    if(c != null ) {
      // Use coordinate information
      double lat = c.getLatitude();
      double lon = c.getLongitude();
      string = " LAT-" + lat + " LONG-" + lon;

    } 




}

}

有帮助吗?

解决方案

There's no way you can link a Gauge to some task.

You have to set values to the Gauge manually. So you'd create a Gauge and add it to your Form. Then start your code to perform the look-up.

In between your lines of code, you'd add myGauge.setValue(some_value); to increase the indicator.

Of course, this becomes difficult when most of the task is contained in a single line of code, like e.g. lp.getLocation(60);. I think, in that case, I would create a Thread that automatically increases the value on the Gauge in the 60 seconds, but can be stopped/overridden by a manual setting.

class Autoincrementer implements Runnable {

private boolean running;
private Gauge gauge;
private int seconds;
private int secondsElapsed;

 public Autoincrementer(Gauge gauge) {
  this.gauge = gauge;
  this.seconds = gauge.getMaxValue();
  this.running = true;
  this.secondsElapsed = 0;
 }

 public void run() {

  if (running) {
   secondsElapsed++;
   gauge.setValue(secondsElapsed);
   if (secondsElapsed>=gauge.getMaxValue()) running = false; // Stop the auto incrementing
   try {
    Thread.sleep(1000); // Sleep for 1 second
   } catch (Exception e) {}
  }
 }

 public void stop() {
  running = false;
 }

}

You would then create a Gauge and add it to your Form

myGauge = new Gauge("Process", false, 60, 0);
myForm.append(myGauge);

Then start the auto-increment.

myIncrementer = new Autoincrementer(myGauge);
new Thread(myIncrementer).start();

And then call your look-up code.

checkLocation();

Inside your look-up code, add code to stop the auto-incrementing and set the Gauge object to 100%, if the look-up was successful (meaning before the timeout).

myIncrementer.stop();
myGauge.setValue(60);

其他提示

LWUIT 1.5 can help you in this. Am not sure for Location API which you are using. But you will get Gauge using LWUIT 1.5. Use Lwuit instead of LCDUI.

http://www.oracle.com/technetwork/java/javame/javamobile/download/lwuit/index.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top