创建一个安卓GPS追踪应用程序。

50

我最近作为一项爱好开始学习Android开发,希望可以开发一个应用程序,使用Google地图找到并跟踪用户的位置。

一旦应用程序获取了GPS锁定,它可以通过绘制覆盖类路径来跟踪用户的移动。

我看过类似Mytracks这样的开源应用程序,但它们对我来说过于复杂了。

理想情况下,我想创建一个看起来像这样的应用程序:

以下是我的代码,不包含导入部分。

我的目标是创建一个geopoints数组。 每次位置发生变化时,就会创建一个新的geopoint。 然后,我尝试使用for循环遍历每个geopoint,并在它们之间绘制路径。

public class Tracking extends MapActivity implements LocationListener {

LocationManager locman;
LocationListener loclis;
Location Location;
private MapView map;

List<GeoPoint> geoPointsArray = new ArrayList<GeoPoint>();
private MapController controller;
String provider = LocationManager.GPS_PROVIDER;
double lat;
double lon;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);
    initMapView();
    initMyLocation();
    locman = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // locman.requestLocationUpdates(provider,60000, 100,loclis);
    // Location = locman.getLastKnownLocation(provider);

}

/** Find and initialize the map view. */
private void initMapView() {
    map = (MapView) findViewById(R.id.map);
    controller = map.getController();
    map.setSatellite(false);
    map.setBuiltInZoomControls(true);
}

/** Find Current Position on Map. */
private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
    overlay.enableMyLocation();
    overlay.enableCompass(); // does not work in emulator
    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            // Zoom in to current location
            controller.setZoom(24);
            controller.animateTo(overlay.getMyLocation());
        }
    });
    map.getOverlays().add(overlay);
}

@Override
public void onLocationChanged(Location location) {
    if (Location != null) {
        lat = Location.getLatitude();
        lon = Location.getLongitude();
        GeoPoint New_geopoint = new GeoPoint((int) (lat * 1e6),
                (int) (lon * 1e6));
        controller.animateTo(New_geopoint);

    }

}

class MyOverlay extends Overlay {
    public MyOverlay() {
    }

    public void draw(Canvas canvas, MapView mapv, boolean shadow) {
        super.draw(canvas, mapv, shadow);

        Projection projection = map.getProjection();
        Path p = new Path();
        for (int i = 0; i < geoPointsArray.size(); i++) {
            if (i == geoPointsArray.size() - 1) {
                break;
            }
            Point from = new Point();
            Point to = new Point();
            projection.toPixels(geoPointsArray.get(i), from);
            projection.toPixels(geoPointsArray.get(i + 1), to);
            p.moveTo(from.x, from.y);
            p.lineTo(to.x, to.y);
        }
        Paint mPaint = new Paint();
        mPaint.setStyle(Style.STROKE);
        mPaint.setColor(0xFFFF0000);
        mPaint.setAntiAlias(true);
        canvas.drawPath(p, mPaint);
        super.draw(canvas, map, shadow);
    }
}

@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

}

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

应用程序没有错误地运行,但没有路径被绘制,只是当我移动时位置点也在移动。

任何帮助将不胜感激 谢谢。


2
我对你的代码很感兴趣,我认为它对于简单的安卓GPS地图很有帮助。 我想问一下,你是否已经找到了解决上述代码问题的方法? - user970609
是啊...我也是...我也很感兴趣 @David,你还在吗? - gumuruh
您想要构建的应用程序跟踪您自己的移动,对吗?通过手机号码定位用户的移动是否可能? - AV94
2个回答

22

请问您如何将HTTP客户端、HTTP MIME和Signpost项目添加到GPSTracker中? - bhargavkumar040
有没有针对开发者代码的教程,@chiranjib 或 @ToonKrijthe? - gumuruh
无法检出代码。Git和SVN的URL都无法使用。 - chetan singhal

0

制作 Android 位置检测应用程序,您需要以下几件事:

如果你自己编写每个模块,那么需要花费很多时间和精力。因此最好使用已经维护好的准备资源。

使用所有这些资源,您将能够创建一个完美的Android位置检测应用程序。

1. 位置监听

您首先需要监听用户的当前位置。您可以使用以下任何库来快速启动。

Google Play位置示例

该库提供上次已知位置、位置更新等功能。

位置管理器

使用此库,您只需提供一个配置对象,其中包含您的要求,您将收到一个位置或失败原因,所有这些都已处理好。

实时位置共享

使用Hypertrack Live应用程序的开源存储库,在几小时内在您的应用程序中构建实时位置共享体验。当您正在前往会面时,HyperTrack Live应用程序可以帮助您通过最喜欢的消息应用程序与朋友和家人分享您的实时位置。HyperTrack Live使用HyperTrack API和SDK。
2. 标记库
- {{link1:Google Maps Android API utility library}}
- **标记聚类** - 处理大量点的显示 - **热力图** - 以热力图形式显示大量点 - **IconGenerator** - 在您的标记上显示文本 - **Poly解码和编码** - 用于路径的紧凑编码,与Maps API网络服务的互操作性 - **球面几何** - 例如:计算距离,计算方向,计算区域 - **KML** - 显示KML数据 - **GeoJSON** - 显示和样式化GeoJSON数据
3. 折线库

DrawRouteMaps

如果您想在应用程序中添加路线图功能,可以使用DrawRouteMaps使您的工作更加轻松。这个库将帮助您在两个点LatLng之间绘制路线图。

trail-android

使用投影在谷歌地图上为路线/折线提供简单、平滑的动画效果。(正在进行中)

Google-Directions-Android

此项目允许您计算两个位置之间的方向,并使用Google Directions API在Google地图上显示路线。

一个快速启动地图演示应用程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接