检测网络年龄 Google 地图地理定位 API
Detect age of network need for Google Maps Geolocation API
我正在使用 Google 地图地理定位 API 创建一个应用程序,它将从网络中获取用户的位置。 Google Maps Geolocation API 有一些属性可以发送到 url 以从 Google 获得正确的输出。我的问题是
手机信号塔对象 - 年龄
作为参考,您可以在此处查看 Cell tower objects
WiFi 接入点对象 - age、channel、signalToNoiseRatio
作为参考,您可以在此处查看 WiFi access point object
我尝试了 TelePhonyManager 和 Wifi ScaneResult(),但无法获得这些值
如果有人知道或访问 Google 地图地理位置 API,请提出建议,以便我将这些值传递到 Google 地图 API 以获得最佳结果
等待回复
谢谢
您可以使用AsyncTask
进行网络请求。
示例代码:
private class GetGeolocationTask extends AsyncTask<Object, Void, String> {
@Override
protected String doInBackground(Object... arg0) {
InputStream inputStream = null;
String result = "";
try {
// 1. create HttpClient
HttpClient httpclient = new DefaultHttpClient();
// 2. make POST request to the given URL
HttpPost httpPost = new HttpPost("https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY");
String json = "";
// 3. build jsonObject
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("homeMobileCountryCode", 310);
jsonObject.accumulate("homeMobileNetworkCode", 410);
jsonObject.accumulate("radioType", "gsm");
jsonObject.accumulate("carrier", "vodafone");
JSONArray cellTowersArray = new JSONArray();
JSONObject cellTowerObject = new JSONObject();
cellTowerObject.accumulate("cellId", 42);
cellTowerObject.accumulate("locationAreaCode", 415);
cellTowerObject.accumulate("mobileCountryCode", 310);
cellTowerObject.accumulate("mobileNetworkCode", 410);
cellTowerObject.accumulate("age", 0);
cellTowerObject.accumulate("signalStrength", -60);
cellTowerObject.accumulate("timingAdvance", 15);
cellTowersArray.put(cellTowerObject);
jsonObject.accumulate("cellTowers", cellTowersArray);
JSONArray wifiAccessPointsArray = new JSONArray();
JSONObject wifiAccessPointObject = new JSONObject();
wifiAccessPointObject.accumulate("macAddress", "01:23:45:67:89:AB");
wifiAccessPointObject.accumulate("age", 0);
wifiAccessPointObject.accumulate("channel", 11);
wifiAccessPointObject.accumulate("signalToNoiseRatio", 40);
wifiAccessPointsArray.put(wifiAccessPointObject);
jsonObject.accumulate("wifiAccessPoints", wifiAccessPointsArray);
// 4. convert JSONObject to JSON to String
json = jsonObject.toString();
// 5. set json to StringEntity
StringEntity se = new StringEntity(json);
// 6. set httpPost Entity
httpPost.setEntity(se);
// 7. Set some headers to inform server about the type of the content
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
// 8. Execute POST request to the given URL
HttpResponse httpResponse = httpclient.execute(httpPost);
// 9. receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
// 10. convert inputstream to string
if(inputStream != null)
result = convertInputStreamToString(inputStream);
else
result = "Did not work";
}
catch (MalformedURLException e) {
logException(e);
}
catch (IOException e) {
logException(e);
}
catch (Exception e) {
logException(e);
}
return result;
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(YourActivity.this, result, Toast.LENGTH_LONG).show();
}
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException{
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
您可以在 activity 中调用此 AsyncTask,如下所示:
GetGeolocationTask getBlogPostsTask = new GetGeolocationTask();
getGeolocationTask.execute();
您还可以阅读 this tutorial 了解有关如何将 JSON 放入请求正文的详细信息。
或者,您可以使用 Google Volley library to do your network request, sample request can be found in this Whosebug answer。
我正在使用 Google 地图地理定位 API 创建一个应用程序,它将从网络中获取用户的位置。 Google Maps Geolocation API 有一些属性可以发送到 url 以从 Google 获得正确的输出。我的问题是
手机信号塔对象 - 年龄 作为参考,您可以在此处查看 Cell tower objects
WiFi 接入点对象 - age、channel、signalToNoiseRatio 作为参考,您可以在此处查看 WiFi access point object
我尝试了 TelePhonyManager 和 Wifi ScaneResult(),但无法获得这些值
如果有人知道或访问 Google 地图地理位置 API,请提出建议,以便我将这些值传递到 Google 地图 API 以获得最佳结果
等待回复 谢谢
您可以使用AsyncTask
进行网络请求。
示例代码:
private class GetGeolocationTask extends AsyncTask<Object, Void, String> {
@Override
protected String doInBackground(Object... arg0) {
InputStream inputStream = null;
String result = "";
try {
// 1. create HttpClient
HttpClient httpclient = new DefaultHttpClient();
// 2. make POST request to the given URL
HttpPost httpPost = new HttpPost("https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY");
String json = "";
// 3. build jsonObject
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("homeMobileCountryCode", 310);
jsonObject.accumulate("homeMobileNetworkCode", 410);
jsonObject.accumulate("radioType", "gsm");
jsonObject.accumulate("carrier", "vodafone");
JSONArray cellTowersArray = new JSONArray();
JSONObject cellTowerObject = new JSONObject();
cellTowerObject.accumulate("cellId", 42);
cellTowerObject.accumulate("locationAreaCode", 415);
cellTowerObject.accumulate("mobileCountryCode", 310);
cellTowerObject.accumulate("mobileNetworkCode", 410);
cellTowerObject.accumulate("age", 0);
cellTowerObject.accumulate("signalStrength", -60);
cellTowerObject.accumulate("timingAdvance", 15);
cellTowersArray.put(cellTowerObject);
jsonObject.accumulate("cellTowers", cellTowersArray);
JSONArray wifiAccessPointsArray = new JSONArray();
JSONObject wifiAccessPointObject = new JSONObject();
wifiAccessPointObject.accumulate("macAddress", "01:23:45:67:89:AB");
wifiAccessPointObject.accumulate("age", 0);
wifiAccessPointObject.accumulate("channel", 11);
wifiAccessPointObject.accumulate("signalToNoiseRatio", 40);
wifiAccessPointsArray.put(wifiAccessPointObject);
jsonObject.accumulate("wifiAccessPoints", wifiAccessPointsArray);
// 4. convert JSONObject to JSON to String
json = jsonObject.toString();
// 5. set json to StringEntity
StringEntity se = new StringEntity(json);
// 6. set httpPost Entity
httpPost.setEntity(se);
// 7. Set some headers to inform server about the type of the content
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
// 8. Execute POST request to the given URL
HttpResponse httpResponse = httpclient.execute(httpPost);
// 9. receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
// 10. convert inputstream to string
if(inputStream != null)
result = convertInputStreamToString(inputStream);
else
result = "Did not work";
}
catch (MalformedURLException e) {
logException(e);
}
catch (IOException e) {
logException(e);
}
catch (Exception e) {
logException(e);
}
return result;
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(YourActivity.this, result, Toast.LENGTH_LONG).show();
}
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException{
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
您可以在 activity 中调用此 AsyncTask,如下所示:
GetGeolocationTask getBlogPostsTask = new GetGeolocationTask();
getGeolocationTask.execute();
您还可以阅读 this tutorial 了解有关如何将 JSON 放入请求正文的详细信息。
或者,您可以使用 Google Volley library to do your network request, sample request can be found in this Whosebug answer。