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

Pan*_*ora 6 service android push-notification

我正在开发一个应用程序,其中我需要当前的lat和设备的长度.获取lat/long的时间范围将由服务器决定.只要需要获取lat/lang,服务器就会发送通知.当设备从服务器收到通知时,设备同时将其位置发送到服务器.

一些条件:

  • 我想要lat/long即使设备没有gps

  • 如果用户没有触摸或点击通知,那么我也想获取lat/long,即使设备处于睡眠模式.

  • 此外,我不想一整天都运行后台服务,因为它消耗了设备的电池.

nKn*_*nKn 21

我肯定会建议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密钥和发件人ID.

  2. 你需要让设备注册你的项目GCM.您可以通过Google Play Services在项目中导入来实现此目的,一旦完成,就可以执行以下操作:

    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
    final String regid = gcm.register("YOUR_SENDER_ID");
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此时,GCM服务器已经知道该用户已经在您的项目中注册了并且已经给了他一个regid.

  4. 下一步是通知您自己的远程服务器用户已经这样做,并保存regid它已经给出的地方,以便您以后可以发送消息.因此,在客户端,HTTP POST请求您的服务器发送该请求regid并使用以下方式处理它:

    $regid = $_POST['regid'];
    
    if (($regId) && ($ipAddr))
      sql_query("INSERT INTO gcm_subscribers(regid) VALUES($regid')");
    
    Run Code Online (Sandbox Code Playgroud)
  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;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. 一旦你的客户,只是处理该GCM消息,并再拍POST另一个URL在远程服务器上,并通过它的longitudelatitude.要处理这些消息,我在下面提供了一些链接.

并且为了获得没有GPS的坐标似乎没有太多的解决方案,但有一些.这将是一个例子:如何在Android中不使用GPS获得Latitute经度值?

更多关于此: