Другие приложения, на которые вы ссылаетесь, делают что-то отличное от того, что вы могли ожидать. Они позволяют поворачивать экран в зависимости от акселерометра устройства; то есть пользователь поворачивает устройство, и ориентация меняется. Они не устанавливают конкретную ориентацию для какого-либо приложения. Обратите внимание, что если вы отключите автоматический поворот в ландшафтном режиме, ориентация обычно возвращается к портретной.
Я сделал то же самое, что и эти другие приложения раньше. К сожалению, это частный коммерческий код, которым я не могу поделиться.
В подходе есть две составляющие:
- Определить, когда приложение переднего плана является целевым приложением
- Изменение общесистемного предпочтения для ориентации экрана
Очевидно, вы должны сделать и обратное, т.е. изменить его потом.
Есть несколько примеров части 1 в другом месте на SO. В моем случае я написал службу, которая постоянно опрашивала, что представляет собой приложение переднего плана (поскольку нет соответствующих системных событий для информирования об изменении приложения). Это не тривиальная задача, но это может быть сделано.
Соответствующая настройка для фрагмента 2 — Settings.System.ACCELEROMETER_ROTATION
. Я думаю, вы можете написать это с обычным разрешением приложения во всех версиях. Фрагмент кода для этого приведен ниже:
Settings.System.putInt(
app.getContentResolver(),
Settings.System.ACCELEROMETER_ROTATION,
orientationEnabled ? 1 : 0
);
Также обратите внимание, что можно написать приложение, которое будет игнорировать поворот экрана системы; то есть останется заблокированным в любой ориентации, для которой он был разработан. Хотя это не обычное дело.
person
Rob Pridham
schedule
31.01.2013