2014-10-04 5 views
2

Интересно, испытали ли другие это. при подключении к датчику Sensor.TYPE_MAGNETIC_FIELD на Moto 360 (Android Wear), я не получаю никаких обновлений.Датчик магнитного поля в Moto 360 не отправляет обновления

следующий код все работает:

SensorManager sm = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE); 
Sensor magnetic = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 
Log.i("Wear", "magnetic: " + magnetic); 

с выходом:

I/Wear (17471): magnetic: {Sensor name="Compass Sensor", vendor="Motorola", version=1, type=2, maxRange=4900.0, resolution=0.15, power=0.45, minDelay=40000} 

, но после регистрации слушателя этого датчика, никакие события не всегда увольняют.

другие датчики (например, акселерометр и гироскоп) работают нормально.

ответ

0

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

+0

Можете ли вы объяснить, почему это поможет? – emsworth

+0

Я пробовал все вышеперечисленное (и многое другое, например, используя TYPE_MAGNETIC_FIELD_UNCALIBRATED), но ничего не кажется «просыпающимся» компасом. Возможно ли, что он отключен в прошивке? – cjm

-1

Вы хотите зарегистрировать слушатель и есть, что слушатель читать значения, когда они возвращаются:

sm.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL); 

Затем реализовать слушатель и получить значение (., Например, что-то вроде этого):

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
* sensors 
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
@Override public void onSensorChanged(SensorEvent event) { 

    if(event.sensor.getType() == magnetic.getType()) { 
     float mag = event.values[0]; 
    } 
} 

@Override public void onAccuracyChanged(Sensor sensor, int accuracy) { 

} 
+0

ну да, у меня есть слушатель, но он никогда не вызывается на Moto 360. для других датчиков (гироскопа, акселерометра) вызывается слушатель. на общем телефоне для Android, слушатель также называется –

+0

. Я могу проверить, что это проблема не только у ОП. Кто-нибудь смог получить обновления компаса с Moto 360? – cjm

0

Я подозреваю, что это большая проблема, чем просто 360. Я только что получил LG Watch R, и компас не работает. Существует одно контрольное лицо, имеющее компас, и оно всегда указывает в одном направлении. Я установил расширение geocaching для C | Geo, которое должно указывать расстояние и оповещение о цели, и оно всегда указывает на 12:00.
Примечание от разработчика показывает, что это известная проблема с SDK, где он перечисляет эту пулю в запланированных возможностях для дальнейшего развития:

Полностью реализовать поддержку часового циркуля (в настоящее время не возможно из-за Android Носите проблемы с SDK).

от: https://github.com/culmor30/cgeo-wear

Таким образом, кажется, что это известная проблема/ограничение SDK.

+0

Как смешно, что мои документы будут связаны как источник в том же потоке, который я наблюдал, чтобы попытаться найти решение этой проблемы: p Что я имел ввиду под «невозможным из-за проблем с Android Wear SDK», было что у меня возникают проблемы с его работой, но это также мое первое приложение для Wear, поэтому я могу сделать это неправильно. Я не знаю, действительно ли это «известная проблема» в AOSP. Я читал сообщения на форумах людьми, говорящими, что они столкнулись с приложениями Android Wear, которые _do_ как-то работают, но я не пробовал ни одного из них для себя. – cjm

0

У меня была та же проблема. Но только если часы сопряжены с moto x 2013 (kitkat 4.4.4). С Asus padfone 2 (kitkat 4.4.2) и с nexus 5 (Lollipop 5.1) у меня нет проблемы. Для Exemple Я попытался это приложение: https://play.google.com/store/apps/details?id=jack.campbell.messive.compass

С Moto 360 и нексус 5 работ с moto360 и Moto X 2013 не работает. Я не знаю, почему, но я думаю, что со следующего обновления Android одежда решит.