getOrientation () устарела, но это не обязательно корень вашей проблемы. Это правда, что вы должны использовать getRotation () вместо getOrientation () , но вы можете использовать его, только если вы нацелены на Android 2.2 (уровень API 8) или выше. Некоторые люди и даже гуглеры иногда забывают об этом.
Как пример, на моем HTC desire работает Android 2.2. getOrientation () и getRotation () оба выдают одинаковые значения:
- 0 (по умолчанию, портрет),
- 1 (устройство на 90 градусов против часовой стрелки),
- 3 (устройство на 90 градусов по часовой стрелке)
Он не сообщает, когда вы положите его «на голову» (поверните на 180, это будет значение 2). Этот результат, возможно, зависит от устройства.
Прежде всего, вы должны уточнить, используете ли вы эмулятор или устройство. Вы знаете, как вращать эмулятор? Тогда я бы порекомендовал создать небольшую тестовую программу с методом onCreate (), например:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display mDisplay = mWindowManager.getDefaultDisplay();
Log.d("ORIENTATION_TEST", "getOrientation(): " + mDisplay.getOrientation());
}
Проверьте, не заблокирован ли экран вашего устройства в настройках устройства Настройки> Дисплей> Автоповорот экрана . Если этот флажок снят, Android не будет сообщать об изменениях ориентации вашей активности. Чтобы было понятно: это не возобновит деятельность. В моем случае я получаю только 0 , как вы описали.
Вы можете проверить это в своей программе, если добавите эти строки в onCreate ()
int sysAutoRotate = 0;
try {
sysAutoRotate = Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION);
} catch (SettingNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("ORIENTATION_TEST", "Auto-rotate Screen from Device Settings:" + sysAutoRotate);
Будет возвращено 0 , если функция автоповорота выключена, и 1 , если функция автоповорота включена.
Еще одна попытка. В исходной программе вы могли установить манифест
android:screenOrientation="portrait"
Тот же эффект, но на этот раз только для вашей деятельности. Если бы вы создали небольшую тестовую программу, эта возможность была бы исключена (поэтому я рекомендую ее).
Примечание: Да, вся тема ориентации / ротации действительно "интересная" тема. Попробуйте, используйте Log.d (), экспериментируйте, учитесь.