получить широту и долготу текущего местоположения ежевики - PullRequest
1 голос
/ 14 марта 2012

Я хочу получить значение текущего местоположения. Я использую этот код, но я просто получаю это сообщение «Ожидание обновления местоположения ...». Есть конфигурация, я должен сделать это в телефоне, чтобы получить адрес текущего местоположения ??? Статус GPS доступен для моего мобильного телефона. Но я думаю, что местоположение недействительно, потому что я не получил диалоговое окно с предупреждением. Что нужно сделать, чтобы узнать широту и долготу текущего местоположения ??

package mypackage;

import net.rim.device.api.gps.*;
import net.rim.device.api.system.Application;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import javax.microedition.location.*;

public class MultipleFixDemo extends UiApplication 
{    
    private static int _interval = 1;
    private EditField _status;    

    public static void main(String[] args)
    {
        new MultipleFixDemo().enterEventDispatcher();
    }

    public MultipleFixDemo()
    {
        MultipleFixScreen screen = new MultipleFixScreen();
        screen.setTitle("Multiple Fix Demo");

        _status = new EditField(Field.NON_FOCUSABLE);
        screen.add(_status);

        startLocationUpdate();
        pushScreen(screen);
    }

    private void updateLocationScreen(final String msg)
    {
        invokeLater(new Runnable()
        {
            public void run()
            {
                _status.setText(msg);
            }
        });
    }

   private void startLocationUpdate()
    {
        try
        {
            BlackBerryCriteria myCriteria = new BlackBerryCriteria();
            myCriteria.enableGeolocationWithGPS();
            try
            {
                BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria);

                if ( myProvider == null )
                {
                    Runnable showUnsupportedDialog = new Runnable() 
                    {
                        public void run() {
                            Dialog.alert("Location service unsupported, exiting...");
                            System.exit( 1 );
                        }
                    };
                    invokeLater( showUnsupportedDialog );  
                }
                else
                {
                    myProvider.setLocationListener(new LocationListenerImpl(), _interval, 1, 1);

                }
            }
            catch (LocationException le)
            {
                System.err.println("Failed to retrieve a location provider");
                System.err.println(le); 
                System.exit(0);
            }
        }
        catch (UnsupportedOperationException ue)
        {
            System.err.println("Require mode is unavailable");
            System.err.println(ue); 
            System.exit(0);   
        }
        return;
    }


    private class LocationListenerImpl implements LocationListener
    {
        public void locationUpdated(LocationProvider provider, Location location)
        {
            if(location.isValid())

            {
                Dialog.alert("if");
                double longitude = location.getQualifiedCoordinates().getLongitude();
                double latitude = location.getQualifiedCoordinates().getLatitude();
                float altitude = location.getQualifiedCoordinates().getAltitude();

                StringBuffer sb = new StringBuffer();
                sb.append("Longitude: ");
                sb.append(longitude);
                sb.append("\n");
                sb.append("Latitude: ");
                sb.append(latitude);
                sb.append("\n");
                sb.append("Altitude: ");
                sb.append(altitude);
                sb.append(" m");
                MultipleFixDemo.this.updateLocationScreen(sb.toString());
            }
        }

        public void providerStateChanged(LocationProvider provider, int newState)
        {
            // Not implemented
        }        
    }

    private final static class MultipleFixScreen extends MainScreen
    {
        MultipleFixScreen()
        {
            super(DEFAULT_CLOSE | DEFAULT_MENU);

            RichTextField instructions = new RichTextField("Waiting for location update...",Field.NON_FOCUSABLE);
            this.add(instructions);
        }
    }     
}

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Попробуйте этот код, он будет работать для меня. с обновлением он будет давать широту и долготу каждые 1 сек.

import javax.microedition.location.Location;
import javax.microedition.location.LocationException;
import javax.microedition.location.LocationListener;
import javax.microedition.location.LocationProvider;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;


public final class MyScreen extends MainScreen
{
     private LocationProvider locationProvider;
     private static int interval = 1;
     double lat;
     double longt;

    public MyScreen()
    {   
        setTitle("MyTitle");
        startLocationUpdate();          
    }

    private boolean startLocationUpdate()
    {
        boolean retval = false;

            try
            {
            locationProvider = LocationProvider.getInstance(null);

            if ( locationProvider == null )
            {

            Runnable showGpsUnsupportedDialog = new Runnable()
            {
                public void run()
                {

                Dialog.alert("GPS is not supported on this platform, exiting...");
                //System.exit( 1 );
                }
            };

            UiApplication.getUiApplication().invokeAndWait( showGpsUnsupportedDialog ); // Ask event-dispatcher thread to display dialog ASAP.
            }
            else
            {

            locationProvider.setLocationListener(new LocationListenerImpl(), interval, 1, 1);

            retval = true;
            }
            }
            catch (LocationException le)
            {
                System.err.println("Failed to instantiate the LocationProvider object, exiting...");
                System.err.println(le);
                System.exit(0);
            }
            return retval;
            }

            private class LocationListenerImpl implements LocationListener
            {

            public void locationUpdated(LocationProvider provider, Location location)
            {
                    if(location.isValid())
                    {
                        double longitude = location.getQualifiedCoordinates().getLongitude();
                        double latitude = location.getQualifiedCoordinates().getLatitude();

                        updateLocationScreen(latitude, longitude);              

                    }
            }

            public void providerStateChanged(LocationProvider provider, int newState)
            {
            }
        }

         private void updateLocationScreen(final double latitude, final double longitude)
            {
                    UiApplication.getUiApplication().invokeAndWait(new Runnable()
                    {
                    public void run()
                    {
                    lat = latitude;
                    longt = longitude;


                    RichTextField txt=new RichTextField();
                    txt.setText("Long=="+longt);

                    RichTextField txt1=new RichTextField();
                    txt1.setText("lat=="+lat);

                    add(txt);
                    add(txt1);


//                  persistentLatitude.setContents(Double.toString(latitude));
//                  persistentLongitude.setContents(Double.toString(longitude));



                    }
                    });
            }
}
0 голосов
/ 14 марта 2012

Если вы работаете над Blackberry OS 5.0 и письмом, проверьте мой ответ на «Как я могу получить широту и долготу в ежевике?» .Это получить местоположение в течение 2 или 3 секунды.Я надеюсь, что это поможет вам.попробуйте в устройстве и проверьте.

0 голосов
/ 14 марта 2012

Попробуйте этот код, чтобы получить текущее местоположение;

private LocationProvider provider;
    private Location _location= null;


        Criteria myCriteria = new Criteria();
        myCriteria.setCostAllowed(true);
        provider = LocationProvider.getInstance(myCriteria);
        _location = provider.getLocation(4);
        QualifiedCoordinates coordinates = _location.getQualifiedCoordinates();
        String lon =Double.toString(coordinates.getLongitude());
        String lat = Double.toString(coordinates.getLatitude());
...