Android Things: расположение через Wi-Fi

Здравствуйте, можно узнать местоположение Pico i.MX7 на базе Android Things через Wi-Fi? Когда я запускаю этот код на телефоне, все отлично работает, но когда я запускаю его на Pico, создается впечатление, что requestLocationUpdates ничего не обновляет, а местоположение все еще равно нулю. У меня тоже есть разрешения в Манифесте (FINE и COARSE). Спасибо!

public class MainActivity extends Activity {

private LocationManager mLocationManager;
private String locationProvider = LocationManager.NETWORK_PROVIDER;

private TextView lat;
private TextView lon;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lat = (TextView) findViewById(R.id.lat);
    lon = (TextView) findViewById(R.id.lon);

    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.ACCESS_FINE_LOCATION)) {

        } else {

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    2);
        }
    }

    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Location location = mLocationManager.getLastKnownLocation(locationProvider);
    mLocationManager.requestLocationUpdates(locationProvider, 10, 0, mLocationListener);
    // Toast.makeText(this, "Start", Toast.LENGTH_SHORT).show();
    showMyLocation(location);

    //Intent intent = new Intent(getApplicationContext(), SprinklerActivity.class);
    //startActivity(intent);
}

private void showMyLocation(Location l) {
    if (l == null) {
        Toast.makeText(this, "No location", Toast.LENGTH_SHORT).show();
        lat.setText("0");
        lon.setText("0");
    } else {
        Toast.makeText(this, "Latitude: " + l.getLatitude(), Toast.LENGTH_SHORT).show();
        Toast.makeText(this, "Longitude: " + l.getLongitude(), Toast.LENGTH_SHORT).show();
        lat.setText(l.getLatitude() + "");
        lon.setText(l.getLongitude() + "");
    }
}

private LocationListener mLocationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        showMyLocation(location);
    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }
};

1 ответ

Кажется, нет никакой реализации для автоматического обновления местоположения в Android Things (даже для LocationManager.NETWORK_PROVIDER), но в любом случае, если у вас есть доступ к Интернету, вы можете использовать запросы Google Maps Geolocation API, например:

https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY

с информацией о целевой точке доступа WiFi в запросе, и если целевая точка доступа WiFi находится в базе данных Google, вы получите ответ JSON с широтой и долготой и точностью. Для более точных результатов следует использовать модуль GPS, подключенный, например, через UART. Вот официальное описание использования GPS-модулей на Android Things, а здесь - исходный код драйвера пользовательского режима. Более того, если вы используете модуль GPS с GpsDriver вы можете отправить обновление местоположения в структуру (через .reportLocation() метод) и ваш код вопроса должен работать.

Другие вопросы по тегам