Показать сообщение отдельно
Старый 23.02.2011, 23:28   #13
NeiroN
AnyKey`щик
 
Аватар для NeiroN
 
Регистрация: 23.02.2011
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Предположительно, JSR-179 : javax.microedition.location

вот пример использования javax.microedition.location

взятый здесь

после его ковыряния написал либу к MP
но в нем тоже есть "костыли" - не ясна надобность сбрасывать ГПС постоянно.

import java.util.Timer;
import java.util.TimerTask;

import javax.microedition.location.Criteria;
import javax.microedition.location.Location;
import javax.microedition.location.LocationException;
import javax.microedition.location.LocationListener;
import javax.microedition.location.LocationProvider;
import javax.microedition.location.QualifiedCoordinates;

import net.rim.device.api.system.Application;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.Ui;
import net.rim.device.api.ui.UiEngine;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;
import bbtracker.uitl.BBTHTTPClient;

public class 
BBTMainScreen extends MainScreen {
    public final static 
String LOCATION_URL "YOUR SCRIPT LOCATION";

    private 
RichTextField logField;
    private 
String log;
    private 
long lastGPSRead;

    public 
BBTMainScreen() {
        
log "";
        
setTitle(new LabelField("BBTracker GPS Fix"LabelField.ELLIPSIS LabelField.USE_ALL_WIDTH));

        
ButtonField btn = new ButtonField("follow logs"ButtonField.CONSUME_CLICK);
        
btn.setChangeListener(new ButtonListener());
        
this.add(btn);
        
        
logField = new RichTextField("asdf");
        
this.add(logField);
        
        
lastGPSRead System.currentTimeMillis();
        
        new 
LocationTracker();
    }
    
    public 
boolean onClose() {
        
Application.getApplication().requestBackground();
        
        return 
false;
    }
    
    final class 
ButtonListener implements FieldChangeListener {
        public 
void fieldChanged(Field fieldint context) {
            
UiEngine ui Ui.getUiEngine();
            
Screen screen = new Dialog(Dialog.D_OKBBTMainScreen.this.logDialog.OK,
            
Bitmap.getPredefinedBitmap(Bitmap.EXCLAMATION), Manager.VERTICAL_SCROLL);
            
ui.queueStatus(screen1true);
        }
    }
    
    class 
LocationTracker extends TimerTask {
        private 
double longitudelatitude;
        private 
Timer timer;
        private 
LocationProvider provider;
        
        public 
LocationTracker() {
            
timer = new Timer();
            
            
resetGPS();
            
            
timer.schedule(this060000);
        }
        
        public 
void resetGPS() {
            try {
                if(
provider != null) {
                    
provider.setLocationListener(null000);
                    
provider.reset();
                    
provider null;
                }
                
                
Criteria criteria = new Criteria();
                
                
criteria.setHorizontalAccuracy(1000);
                
criteria.setVerticalAccuracy(1000);
                
criteria.setCostAllowed(false);
              
//                criteria.setAltitudeRequired(false);
//                criteria.setSpeedAndCourseRequired(false);
//                criteria.setAddressInfoRequired(false);
                
criteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW);
                
                
provider LocationProvider.getInstance(criteria);
                
provider.setLocationListener(new MyLocationListener(), 10, -1, -1);
                
                
// reset the gps counter so we wait another 5 mins before a reset
                
lastGPSRead System.currentTimeMillis();
            } catch(
Exception e) { log e.toString() + log; }
            
            
log "reset gps\n" log;
        }
        
        public 
void run() {
            if(
log.length() > 3000) {
                
log log.substring(log.length() - 3000);
            }
            
            if(
System.currentTimeMillis() - lastGPSRead 300000) {
                
BBTHTTPClient.getPage(LOCATION_URL "?longitude=-1&latitude=-1");
                
resetGPS();
                
BBTHTTPClient.getPage(LOCATION_URL "?longitude=-2&latitude=-2");
            }
            
            
log longitude "," latitude "\n" log;
            
            
BBTMainScreen.this.logField.setText(longitude "," latitude "\n");
            
            
log BBTHTTPClient.getPage(LOCATION_URL "?longitude=" longitude "&latitude=" latitude).trim() + log;
        }
        
        private class 
MyLocationListener implements LocationListener {
            public 
void locationUpdated(LocationProvider providerLocation location)
            {
                if(
location != null && location.isValid())
                {
                    
log "got valid coords\n" log;
                    
                    
QualifiedCoordinates qc location.getQualifiedCoordinates();

                    try {
                        
// TODO: not thread safe (assignment should be done at one time)
                        
LocationTracker.this.longitude qc.getLongitude();
                        
LocationTracker.this.latitude qc.getLatitude();
                        
                        
lastGPSRead System.currentTimeMillis();
                    } catch(
Exception e) { log e.toString() + log; }
                }
                else
                {
                    
log "location is not valid..\n" log;
                }
            }

            public 
void providerStateChanged(LocationProvider providerint newState) {
                
// TODO: if provider was disabled, then disable reporting
                
log "state changed: " newState "\n" log;
                
                
LocationTracker.this.resetGPS();
                
//                try {
//                    provider.setLocationListener(null, 0, 0, 0);
//                    provider.reset();
//                    provider = null;
//                    provider = LocationProvider.getInstance(new Criteria());
//                    provider.setLocationListener(new MyLocationListener(), 10, -1, -1);
//                } catch(Exception e) { log = e.toString() + log; }
            
}
        }
    }

(Offline)
 
Ответить с цитированием