当前位置: 首页 > 知识库问答 >
问题:

检测Google Maps Geolocation API的网络需求

芮星海
2023-03-14

我正在创建一个应用程序使用谷歌地图地理定位API将获得用户的位置从网络。Google Maps Geolocation API有一些属性可以在url中发送,以从Google获得正确的输出。我的问题是

>

  • 电池塔对象-年龄参考yu可以在这里查看电池塔对象

    WiFi接入点对象-年龄,信道,信号,您可以在这里查看WiFi接入点对象

    我尝试了TelePhonyManager和Wifi ScaneResult(),但无法获得这些值

    如果有人知道或访问谷歌地图地理定位API,请提出建议,所以我会将这些值传递到谷歌地图API以获得最佳结果

    等待回复感谢

  • 共有1个答案

    邢皓
    2023-03-14

    您可以使用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(); 
    

    您还可以阅读本教程以获得有关如何将JSON放入请求体的详细信息。

    或者,您可以使用Google Volley库来做您的网络请求,示例请求可以在这个Stackoverflow答案中找到。

     类似资料:
    • 我需要解决这个问题。请帮我指导一下。

    • 本文向大家介绍Python检测网络延迟的代码,包括了Python检测网络延迟的代码的使用技巧和注意事项,需要的朋友参考一下 本文讲述了Python检测网络延迟的代码。分享给大家供大家参考,具体如下: 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对呐喊教程的支持。

    • 本文向大家介绍C# ping网络IP 实现网络状态检测的方法,包括了C# ping网络IP 实现网络状态检测的方法的使用技巧和注意事项,需要的朋友参考一下 C# ping网络IP 实现网络状态检测的方法 以上这篇C# ping网络IP 实现网络状态检测的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

    • 本文向大家介绍检查Docker网络,包括了检查Docker网络的使用技巧和注意事项,需要的朋友参考一下 示例 此命令将输出有关app-backend网络的详细信息。 此命令的输出的外观应类似于:            

    • 如何在Android中检测WIFI连接何时已建立? Android WIFI如何检测特定WIFI连接何时可用 广播接收器不工作(检测wifi是否连接) 还有更多...但可悲的是,我没有找到正确的答案。 我想做的事情是获取用户连接到网络的确切事件,然后得到一个好的方法来检测我是否可以做一个谷歌ping,或者检查是否有连接到互联网(只有WIFI,3G连接是不允许的),因为我现在使用的代码有时会失败..

    • 问题背景: 我们研发的一款 app 需要测不同 bssid 的网速,来提示用户采用最佳速度的网络。 现在的实现方式: 1.前端先切换到对应的 bssid 网络上 2.后端提供了一个函数 speedTest,前端可以传递字节数,然后后端会创建相对应大小的垃圾数据返回给前端,后端 go 代码实现也比较简单。假设前端传递 100MB 的数据给后端。 由于网络情况的特殊性,在网络较差的情况下,前端不可能等