使用GCM获取Android位置并在Web上显示(Google地图)

时间:2013-01-21 12:44:24

标签: android google-cloud-messaging

我只是想知道从网络浏览器(任何计算机)请求Android提供其位置(示例)以便用户可以使用谷歌地图查看它是否可行。

这是我头脑中的设计:

  • 从浏览器发送请求到获取位置到Web服务器
  • 使用请求和时间向DB表(GCM_REQUESTS)添加一条记录 请求。
  • Web服务器使用GCM发送请求以提供位置(或其他) 以及requestId。
  • GCM会向android发送相同的数据
  • 现在Android应用程序解析数据(请求)并将其发送到位置 这样的事情 (http://myserver.com/updatelocation?reqId=123&lon=10.0&lat=5.5)
  • 这将保留在GCM_REQUESTS表中。
  • 在使用AJAX调用的同时,我们汇集(5秒)进行任何更新 GCM_REQUESTS表,如果我们发现任何更新,我们将读取并发送它 回到浏览器
  • 现在AJAX调用将停止轮询,浏览器将更新 位置。

请指导我这种方法是否有效,是否可以通过任何其他方法进行优化。

1 个答案:

答案 0 :(得分:1)

我做了类似的事情,这种方法对我来说非常有用,这里只是一些有用的指示:

1)当你推送到GCM服务器时,如果响应不成功(例如,NotRegistered或MisMatchSenderID),则通过浏览器适当地响应用户(应用程序不再安装在设备上或那里是与设备通信的错误)

2)如果设备以null响应,请确保已处理(见下文),并以此时无法确定设备位置的方式向用户报告。

如果您尝试将位置数据设置到帖子中并且它为空,那么我遇到的崩溃了我的应用程序的东西。我已粘贴下面的代码来处理这个问题,以便您可以避免这样的问题。

String provider = lm.getBestProvider(criteria, true);

    if(provider == null)
    {
        provider = LocationManager.GPS_PROVIDER;
    }
    Location location = lm.getLastKnownLocation(provider);

    String lat1 = "";
    String lon1 = "";
    if(location != null)
    {
        lat1 = String.valueOf(location.getLatitude());
        lon1 = String.valueOf(location.getLongitude());
    }

希望这有帮助