Можно ли использовать API геолокации Google Maps для Android TV?

Я создал одно приложение для Android TV, которое уже есть в магазине Google Play и отлично работает.

Теперь мое новое требование - использовать API геолокации Google Maps на Android TV, поэтому меня рекомендовали эту ссылку, но не повезло.

Итак, мой вопрос: можно ли использовать API геолокации Google Карт в Android TV?


person Andy Developer    schedule 10.05.2017    source источник


Ответы (2)


После многих исследований я наконец получил ответ. Да, можно использовать Google Maps Geolocation API на Android TV, но с некоторыми ограничениями. Согласно документация, предоставленная API геолокации Google Maps. Это в основном два способа достижения этой цели.

1) Использование вышки сотовой связи.

2) Использование точек доступа WiFi.

Теперь, для 1-го способа курса это невозможно, потому что Android TV не имеет функции звонков или SIM-карты, поэтому он не может подключиться к Cell Tower, поэтому он не работает.

Что касается второго способа, это довольно интересно. Я исследовал эту вещь и, наконец, успешно реализовал ее. Еще одна вещь, которую я заметил, и также указано в документации, что при использовании IP-адреса он даст самый высокий коэффициент точности, чем точки доступа Cell Tower и WIFI. Итак, я рассматриваю как точки доступа WIFI, так и "thinkIp": "true" для максимальной точности.

После стольких исследований моя актуальная задача - реализовать эту штуку, и мне довольно легко реализовать это, потому что я знаю, как получить точки доступа WIFI, поэтому я использовал следующий способ получения точек доступа WIFI.

List<ScanResult> results;
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
results = wifiManager.getScanResults();

    String message = "No results found.Please Check your wireless is on";
    if (results != null)
    {
        final int size = results.size();
        if (size == 0)
            message = "No access points in range";
        else
        {
            ScanResult bestSignal = results.get(0);
            int count = 1;
            for (ScanResult result : results)
            {
                if (WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0)
                {
                    bestSignal = result;
                }
            }
        }
    }
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();

После получения списка точек доступа WIFI создайте JSONObject, который передает вызов API "https://www.googleapis.com/geolocation/v1/geolocate?key=your_key". Я использовал Volley для вызова этого API. Для создания JSONObject, который содержит точки доступа WIFI, вот способ, который Меня использовали.

JSONObject parent;
try {
        parent = new JSONObject();
        parent.put("considerIp", false);
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject;
        for (int i = 0; i < results.size(); i++) {
            jsonObject = new JSONObject();
            jsonObject.put("macAddress", results.get(i).BSSID);
            jsonObject.put("signalStrength", results.get(i).level);
            jsonObject.put("signalToNoiseRatio", 0);
            jsonArray.put(jsonObject);
            System.out.println("jsonObject: " + jsonObject.toString(4));
        }
        parent.put("wifiAccessPoints", jsonArray);
        Log.d("output", parent.toString());
        System.out.println("parenttttt: " + parent.toString(4));
        txt_request.setText(parent.toString(4));
    } catch (JSONException e) {
        e.printStackTrace();
    }

Из приведенного выше кода я использовал "parent.put (" thinkIp ", false)" причина использования false заключалась только в том, чтобы просто проверить, получил ли я точный результат с помощью точек доступа WIFI или нет. Вы можете сделать это истинным и увидеть результат то, что вы получите.

После успешного ответа вы получили результат, в котором указаны широта и долгота с коэффициентом точности, который показывает, насколько точным был результат. Вы получили ответ примерно так.

{
  "location":
  {
     "lat": your latitude,
     "lng": your longitude
  },
 "accuracy": How accurate the result was [like 1523, 1400.25 etc.]
}

Это способ реализовать API геолокации Google Maps в Android TV, вот и все.

person Andy Developer    schedule 19.06.2017

Из руководства разработчика ТВ:

Телевизоры являются стационарными, домашними устройствами и не имеют встроенных приемников глобальной системы позиционирования (GPS). Если ваше приложение использует информацию о местоположении, вы все равно можете разрешить пользователям искать местоположение или использовать поставщика статического местоположения, например почтовый индекс, настроенный во время настройки телевизионного устройства.

Если вы перейдете по ссылке, вы увидите код, как этого добиться. К сожалению, вы не получите точную позицию, но, в зависимости от ваших требований, этого может быть достаточно.

person Simon Tenbeitel    schedule 01.06.2017
comment
Спасибо за ваш ответ. Но это не поможет мне в том, что вы публикуете, что я уже знаю. Мой вопрос: можно ли использовать API геолокации Google Maps в Android TV. После некоторого исследования я получил ответ, но все еще не опубликовал его в stackoverflow. - person Andy Developer; 02.06.2017
comment
Тогда, пожалуйста, ответьте на свой вопрос и отметьте его как решение на следующий день. - person Simon Tenbeitel; 03.06.2017