我正在开发一个应用程序,其中我需要设备的当前纬度和经度。
获取纬度/经度的时间范围将由服务器决定。每当需要获取纬度/朗度时,服务器都会发送通知。当设备收到通知时
服务器,同时设备将其位置发送到服务器。
一些条件:
我肯定会建议使用Google Cloud Messaging
这里。这样做的好处是,一旦设备运行您的应用程序,您就可以让它注册GCM
您可以向他们发送一些消息,使他们将坐标注册到您的数据库中。
这种方法需要您实现一些服务器(例如,使用 PHP 的 Web 服务器)并使用户与其通信,因此流程将是:
您的服务器向所有已注册的设备发送一条广播消息,告诉它们必须针对GCM
服务。
设备收到消息,然后您执行BroadcastReceiver
获取纬度和经度并将其发送到远程服务器,例如http://www.mysuperserver.com/getlonglat.php
, via a POST
要求。
您的服务器获取这两个参数,您可以保存它们或执行您需要的任何操作。
如果您想遵循此方法,则必须遵循以下步骤:
Go to https://console.developers.google.com https://console.developers.google.com。使用您的 Google 帐户注册一个新项目。这将为您提供 API 密钥和发件人 ID。
-
您需要在您的项目中注册设备GCM
。您可以通过导入来实现这一点Google Play Services
在您的项目中,完成后,执行类似的操作:
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
final String regid = gcm.register("YOUR_SENDER_ID");
此时,GCM
服务器已经知道该用户已在您的项目中注册并给了他一个regid
.
-
下一步是通知您自己的远程服务器用户已这样做,并将regid
已提供,以便您稍后可以向他们发送消息。所以在客户端,做一个HTTP POST
针对您的服务器发送的请求regid
并用类似这样的方法处理它:
$regid = $_POST['regid'];
if (($regId) && ($ipAddr))
sql_query("INSERT INTO gcm_subscribers(regid) VALUES($regid')");
-
完成后,您就知道谁已经在您的数据库中注册了。你可以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;
}
一旦进入你的客户,只需处理它GCM
留言并再发一条POST
到另一个URL
在您的远程服务器上并将其传递给longitude
and latitude
。为了处理这些消息,我在下面添加了一些链接。
对于没有 GPS 的情况下获取坐标似乎没有太多解决方案,但还是有一些。这是一个例子:Android中如何在不使用GPS的情况下获取纬度经度值? https://stackoverflow.com/questions/13761367/how-to-get-latitute-longitude-value-without-using-gps-in-android
有关此的更多信息:
参考谷歌云消息 http://developer.android.com/reference/com/google/android/gms/gcm/GoogleCloudMessaging.html
-
使用 PHP 的 Google 云消息传递 http://distriqt.com/post/1273
使用 HTTP 和 JSON 连接 PHP(服务器)和 Android(客户端) http://fahmirahman.wordpress.com/2011/04/21/connection-between-php-server-and-android-client-using-http-and-json/
Android 推送通知:Google Cloud Messaging (GCM)。实施客户(新版本) http://www.sgoliver.net/blog/?p=4126(西班牙语)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)