qq_38131731 2017-05-11 08:54 采纳率: 100%
浏览 2959
已采纳

android 怎么实现实时GPS监控

我在android studio中模拟了一个Java服务器,连续发送经纬度数据。客户端这边接收数据后要怎么实现在地图上实时显示经纬度确立的点?(java服务器发送数据,建了一个Service接收数据,通过广播发送到Activity,Activity显示地图,同时接收广播数据,在onRecieve方法中showOverlay)在真机测试时,新建了Activity,通过一个Button启动Service,数据传递正常,通过另一个Button启动Activitiy,程序闪退

经纬度数据我是按GPGGA的格式写的,SDK用的是supermap iclient for android,自己试过在地图上标注指定点,坐标转换应该没关系

这个是onRecieve里的代码
``` Bundle bundle=intent.getExtras();
X2 = bundle.getDouble("x");
Y2 = bundle.getDouble("y");
mapView.getController().setCenter(new Point2D(X2,Y2));
point2D2.x=X2;
point2D2.y=Y2;
showOverlay();

地图的话是supermap Iserver发布的网址URL


```  private static final String DEFAULT_URL="http://192.168.1.12:8090/iserver/services/map-ElecChart5/rest/maps/CN484217_22000";
    protected MapView mapView;

        mapView=(MapView)this.findViewById(R.id.mapview)

        LayerView layerView=new LayerView(this);
        layerView.setURL(DEFAULT_URL);
        mapView.setBuiltInZoomControls(true);
        mapView.addLayer(layerView);

这个是闪退的Activity代码
```public class GpsActivity extends AppCompatActivity{
private static final String DEFAULT_URL="http://192.168.1.12:8090/iserver/services/map-ElecChart5/rest/maps/CN484217_22000";
MapView mapView;
private Button buttonEnd;

MyReceiver receiver = null;
private Button buttonStart;
double X2;
double Y2;
Point2D point2D2 = new Point2D(X2, Y2);

@Override
public void onCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gps);
    buttonStart = (Button) findViewById(R.id.button_start);
    buttonEnd = (Button) findViewById(R.id.button_stop);
    buttonEnd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
       stopService(new Intent(GpsShowActivity.this, GpsService.class));
            finish();
        }
    });




    buttonStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startService(new Intent(GpsActivity.this, GpsService.class));

        }
    });



    receiver=new MyReceiver();
    IntentFilter filter=new IntentFilter();
    filter.addAction("com.example.badius.iservertest.GpsService");
    GpsActivity.this.registerReceiver(receiver,filter);
}
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle=intent.getExtras();

        X2 = bundle.getDouble("x");
        Y2 = bundle.getDouble("y");
        mapView.getController().setCenter(new Point2D(X2,Y2));
        point2D2.x=X2;
        point2D2.y=Y2;
        showOverlay();

    }
}
 private void showOverlay(){
    DefaultItemizedOverlay overlay=new DefaultItemizedOverlay(getResources().getDrawable(R.mipmap.point_marker));
    OverlayItem overlayItem1=new OverlayItem(point2D2,"A","A");
    overlay.addItem(overlayItem1);

    mapView.getOverlays().add(new CustomOverlay());
    mapView.getOverlays().add(overlay);
    mapView.invalidate();
}

class CustomOverlay extends Overlay {

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow){
        super.draw(canvas,mapView,shadow);
        Paint paint=new Paint();
        Point point=mapView.getProjection().toPixels(new Point2D(X2,Y2),null);
        paint.setTextSize(24);
        paint.setStrokeWidth(0.8f);
        paint.setARGB(255,255,0,0);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        canvas.drawText("当前位置",point.x,point.y,paint);
    }
}

}

我是门外汉一个,还有什么描述不清楚的麻烦再提示,谢谢!



  • 写回答

3条回答 默认 最新

  • -无-怨-无-悔- 2017-05-11 10:14
    关注

    一眼看不出原因 但是个人能提供一下调试思路 onReceive函数里面做的事情比较多 你要一步一步验证onReceive函数里面是哪个函数出现了问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?