如何使用手机信号塔查找用户位置?

时间:2011-03-03 18:25:31

标签: android location

如何使用Android中的手机信号塔查找用户位置,或如何根据Android中的手机ID获取手机位置?

4 个答案:

答案 0 :(得分:6)

class MyLocationActivity
     extends MapActivity {
    MapController mapController;
    MyPositionOverlay positionOverlay;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapController = mapView.getController();
        // Configure the map display options
        mapView.setSatellite(true);
        mapView.setStreetView(true);
        mapView.displayZoomControls(false);
        mapController.setZoom(17);
        // Add the MyPositionOverlay
        positionOverlay = new MyPositionOverlay();
        List<Overlay> overlays = mapView.getOverlays();
        overlays.add(positionOverlay);
        LocationManager locationmanager;
        String context=Context.LOCATION_SERVICE;
        locationmanager=(LocationManager) getSystemService(context);
        String provider=LocationManager.NETWORK_PROVIDER;
        Location location= locationmanager.getLastKnownLocation(provider);
        updateWithNewLocation(location);
    }
    private void updateWithNewLocation(Location location) {
        if(location!=null){
            positionOverlay.setLocation(location);
            Double lat=location.getLatitude()*1E6;
            Double lon=location.getLongitude()*1E6;
            GeoPoint point = new GeoPoint(lat.intValue(),lon.intValue());
            mapController.animateTo(point);
        }
        else{


        }

    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
}

答案 1 :(得分:3)

使用LocationManager注册位置更新。您可以通过指定提供程序来指定所需的粒度级别。对于手机信号塔更新,请使用NETWORK_PROVIDER

答案 2 :(得分:3)

和MyPositionOverlay也在这里......

public class MyPositionOverlay extends Overlay {
    private final int mRadius = 5;
    Location location;

    public Location getLocation() {
        return location;
    }

    public void setLocation(Location location) {
        this.location = location;
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        Projection projection = mapView.getProjection();
        if (shadow == false) {
            // Get the current location
            Double latitude = location.getLatitude()*1E6;
            Double longitude = location.getLongitude()*1E6;
            GeoPoint geoPoint;
            geoPoint = new GeoPoint(latitude.intValue(),longitude.intValue());

            // Convert the location to screen pixels
            Point point = new Point();
            projection.toPixels(geoPoint, point);
            RectF oval = new RectF(point.x - mRadius, point.y - mRadius,
                point.x + mRadius, point.y + mRadius);

            // Setup the paint
            Paint paint = new Paint();
            paint.setARGB(250, 255, 0, 0);
            paint.setAntiAlias(true);
            paint.setFakeBoldText(true);
            Paint backPaint = new Paint();
            backPaint.setARGB(175, 50, 50, 50);
            backPaint.setAntiAlias(true);
            RectF backRect = new RectF(point.x + 2 + mRadius, point.y - 3*mRadius,
                point.x + 65, point.y + mRadius);

            // Draw the marker
            canvas.drawOval(oval, paint);
            //canvas.drawLines(pts, paint);
            canvas.drawRoundRect(backRect, 5, 5, backPaint);
            canvas.drawText("I am here", point.x + 2*mRadius, point.y, paint);
        }
        super.draw(canvas, mapView, shadow);
    }
}

答案 3 :(得分:0)

您可以从细胞塔中找到LAC(位置区域代码)By API ericsson

https://labs.ericsson.com/apis/mobile-location/documentation