2012-05-10 2 views
4

Я в процессе создания своих первых живых обоев. Я начинаю с кода в образце CubeWallpaper и изменяю его. Пока все идет хорошо, теперь я рисую свою собственную, совершенно другую анимационную графику.Чтение датчика наклона от живых обоев

Теперь я хочу, чтобы мои графики реагировали на степень наклона телефона. Я применил датчик наклона раньше в приложении без обоев. Но когда я пытаюсь включить мой наклонный код в обои, метод onSensorChanged() не появляется, когда-либо вызываемый - по крайней мере, мое сообщение Log никогда не появляется в logcat.

Одна вещь, о которой я не уверен, - это то, где можно добавить implements SensorEventListener. Должен ли мой класс распространять WallpaperService или его дочерний класс, который расширяет Engine? .. Фактически я пробовал это в обоих направлениях - и ни один из них не работал. Есть ли что-то дополнительное, что может потребоваться, чтобы заставить работать наклон?

EDIT: В настоящее время я предполагаю, что implements SensorEventListener добавляется в класс, который расширяет Engine, поэтому суть моего кода выглядит следующим образом:

EDIT: Может быть что-то делать с каким потоком работает SensorEventListener? Я где-то читал, что это должно быть в потоке пользовательского интерфейса.

public class MicksWallPaper extends WallpaperService 
{ 
    // blah blah 

    class MyWallPaper extends Engine implements SharedPreferences.OnSharedPreferenceChangeListener , SensorEventListener 
    { 
     SensorManager sensorManager = null; 
     onCreate() 
     { 
      sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
     } 

     public void onSensorChanged(SensorEvent event) 
     { 
     Log.i("wp:","onSensorChanged"); // I never see this message 
      synchronized (this) 
      { 
       switch (event.sensor.getType()) 
       { 
        case Sensor.TYPE_ORIENTATION: 
         pitch = event.values[1]; 
         Log.i("pitch=",""+pitch); 
        break; 
       } 
      }  
     } 
    }  
} 

EDIT: проблема решена. Как смущающе - я просто забыл вызвать registerListener для моего sensorManager.

+0

Добавить свое окончательное редактирование в качестве ответа на свой вопрос ... вы можете получить больше SO-коричневых очков! –

ответ

0

(по совету огра ...)

Проблема решена. Как смущающе - я просто забыл вызвать registerListener для моего sensorManager.