gpt4 book ai didi

android - 如何在需要时在服务器上发送设备的位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:48 26 4
gpt4 key购买 nike

我正在开发一个应用程序,我需要设备的当前纬度和经度。获取纬度/经度的时间范围将由服务器决定。每当需要获取 lat/lang 时,服务器都会发送通知。当设备收到通知时服务器,同时设备将其位置发送到服务器。

一些条件:

  • 即使设备没有 gps,我也想要纬度/经度

  • 如果用户没有触摸或点击通知,那么我也想获取纬度/经度,即即使设备处于 sleep 模式。

  • 我也不想整天运行后台服务,因为它会消耗设备的电池。

最佳答案

我肯定会建议在这里使用 Google Cloud Messaging。这样做的好处是,一旦设备运行您的应用程序,您就可以让它向 GCM 注册,并且您可以向他们发送一些消息,让他们将他们的坐标注册到您的数据库中。

这种方法需要您必须实现一些服务器(例如,带有 PHP 的 Web 服务器)并让用户与其通信,因此流程将是:

  1. 您的服务器向所有已注册的设备发送一条广播消息,告知它们必须针对 GCM 服务进行注册。

  2. 设备收到消息,您实现 BroadcastReceiver 以获取纬度和经度并将其发送到您的远程服务器,例如 http://www.mysuperserver。 com/getlonglat.php,通过 POST 请求。

  3. 您的服务器接收这两个参数,您可以保存它们或执行任何您需要的操作。

如果你想遵循这种方法,这是你必须遵循的步骤:

  1. 转到 https://console.developers.google.com .使用您的 Google 帐户注册一个新项目。这将为您提供 API key 和发件人 ID。

  2. 您需要在 GCM 中针对您的项目注册设备。您可以通过在您的项目中导入 Google Play Services 来实现此目的,完成后,执行类似的操作:

    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
    final String regid = gcm.register("YOUR_SENDER_ID");
  3. 这时候GCM服务器已经知道这个用户已经在你的项目中注册了,并且给了他一个regid

    <
  4. 下一步是通知您自己的远程服务器用户已这样做,并将已提供的 regid 保存在某处,以便稍后向他们发送消息。因此,在客户端,对发送该 regid 的服务器发出 HTTP POST 请求,并使用如下方式处理它:

    $regid = $_POST['regid'];

    if (($regId) && ($ipAddr))
    sql_query("INSERT INTO gcm_subscribers(regid) VALUES($regid')");
  5. 完成后,您就会知道谁已经在您的数据库中进行了注册。您可以SELECT 所有用户并向他们发送信号以将他们的坐标发回给您。在以下示例中,参数首先是注册 ID 数组,其次是要发送的消息(例如,$messageData = "sendMeYourCoords!")。

    function sendNotification($registrationIdsArray, $messageData) {
    $apiKey = "YOUR_API_KEY";

    $headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $apiKey);
    $data = array(
    'data' => $messageData,
    'registration_ids' => $registrationIdsArray
    );

    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
    curl_setopt( $ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send" );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data) );

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
    }
  6. 进入您的客户端后,只需处理该 GCM 消息并将另一个 POST 发送到远程服务器上的另一个 URL 并传递它是 longitudelatitude。为了处理消息,我在下面添加了几个链接。

对于在没有 GPS 的情况下获取坐标,似乎没有太多的解决方案,但也有一些。这将是一个例子:How to get Latitute Longitude value without using GPS in Android?

更多相关信息:

关于android - 如何在需要时在服务器上发送设备的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22503106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com