Intereting Posts
Можно создать эту простую форму в Android XML? Почему значки, установленные с Notification.Builder.setSmallIcon в Android Lollipop, отображаются как белый квадрат? Нет возможности setProgressDrawable на RemoteViews JsonMappingException: не найдено подходящего конструктора Gradle build не ищет службы Google Play в Android Studio Какой лучший язык для графического программирования в реальном времени на Android? То же расположение для больших и больших устройств Сделать определенную область растрового изображения прозрачным при касании Как правильно реализовать SlidingMenu.OnOpenedListener? Создайте приложение для запуска в android Пользовательские кнопки в Android – Я делаю это правильно? Как увеличить пространство между элементами в linearlayout в android? Замаскированный вход не работает в мобильных телефонах Android? Потоковое аудио между внешним Bluetooth-устройством и телефоном Android Как настроить пользовательский ListView с помощью разделителя с помощью Android?

OnSensorChanged () не вызывается

У меня сегодня много проблем с датчиками, но похоже, что из-за onSensorChanged () не вызывается. Извините за возможный дублирующий вопрос, но я не видел никаких решений. Вот мой код:

public SensorManager manager; public Sensor rotation_vector; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager = (SensorManager)getSystemService(SENSOR_SERVICE); rotation_vector = manager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR); } @Override public void onSensorChanged(SensorEvent event) { int xValue = (int) event.values[0]; int yValue = (int) event.values[1]; int zValue = (int) event.values[2]; Toast.makeText(getApplicationContext(),"this doesn't appear...",Toast.LENGTH_LONG); @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { //TODO: we'll see later about it } public void onPause() { /*Et on le dés-enregistre quand on sort de l'activité, pour économiser de la batterie*/ super.onPause(); manager.unregisterListener(this); } @Override protected void onResume() { /*On enregistre le sensor quand l'utilisateur revient sur l'activité*/ super.onResume(); manager.registerListener(this, rotation_vector, SensorManager.SENSOR_DELAY_NORMAL); if (null != rotation_vector) { } else { Toast.makeText(getApplicationContext(), "There is no gyroscope on your device", Toast.LENGTH_LONG).show(); } } 

Я видел много похожего кода на разных форумах, но оттуда оттуда и некоторые другие темы без решений, я еще не видел такой проблемы … Должен ли я добавить что-то в AndroidManifest? Это обычная проблема? Это там решение?

Спасибо, Томас (извините за мой плохой английский, я французский ^^)

До сих пор я не работал с датчиками, но похоже, что вы получили SensorManager но не зарегистрировали ни одного слушателя изменений, которые должны произойти. Просто спросите себя, как может быть onSensorChanged ?

Взгляните на образец на официальном сайте для разработчиков Android об датчиках, и вы можете увидеть это в onResume() :

 @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL); } 

Также не забудьте изучить всю страницу, это может вам помочь.

Редактировать:

Мне пришлось копировать ваши источники, потому что я не видел никаких проблем. Есть 2 основных варианта:

  • Тост не появляется, потому что вы не сказали ему … Toast.show() отобразит его. Но вы скорее используете Log для вывода изменений в консоль. Тебе решать
  • Не onSensorChanged() float в int в onSensorChanged() потому что все значения равны 0 или (1 / -1, если вам повезет)

Результат следующий:

 @Override public void onSensorChanged(SensorEvent event) { float xValue = event.values[0]; float yValue = event.values[1]; float zValue = event.values[2]; Log.d(LOG_TAG, "x:"+xValue +";y:"+yValue+";z:"+zValue); } 

Другие методы верны

На вашем устройстве, вероятно, нет Sensor.TYPE_ROTATION_VECTOR . Вы должны проверить rotation_vector на null .