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()
метод) и ваш код вопроса должен работать.