Изменение ориентации другого приложения

Я создаю приложение, которое изменит ориентацию какого-либо другого уже установленного приложения. Чтение ориентации другого установленного приложения было простым с помощью объекта ApplicationInfo, но нет возможности изменить его.

После некоторых исследований и разработок я обнаружил, что аналогичные типы приложений (которые меняют ориентацию) также запускают Сервис, что означает, что они меняют ориентацию на лету, но я не знаю, как именно они это делают.

Например, приложение Smart Rotator делает это https://play.google.com/store/apps/details?id=net.xdevelop.rotator_t&hl=en


person Mr Coder    schedule 26.01.2013    source источник


Ответы (2)


Другие приложения, на которые вы ссылаетесь, делают что-то отличное от того, что вы могли ожидать. Они позволяют поворачивать экран в зависимости от акселерометра устройства; то есть пользователь поворачивает устройство, и ориентация меняется. Они не устанавливают конкретную ориентацию для какого-либо приложения. Обратите внимание, что если вы отключите автоматический поворот в ландшафтном режиме, ориентация обычно возвращается к портретной.

Я сделал то же самое, что и эти другие приложения раньше. К сожалению, это частный коммерческий код, которым я не могу поделиться.

В подходе есть две составляющие:

  1. Определить, когда приложение переднего плана является целевым приложением
  2. Изменение общесистемного предпочтения для ориентации экрана

Очевидно, вы должны сделать и обратное, т.е. изменить его потом.

Есть несколько примеров части 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
comment
спасибо за ваш ответ, можете ли вы также предоставить псевдокод для части 1, то есть опрос для проверки работы приложения и статуса завершения? - person Mr Coder; 01.02.2013
comment
Не как таковой, но это выглядит разумной отправной точкой. На практике вы обнаружите различные тонкости; например, приложения, которые вызываются для обработки широковещательной рассылки, но не отображаются визуально, рассматриваются как находящиеся на переднем плане, но это то, к чему вам, вероятно, следует обращаться с новым вопросом SO, когда вы сталкиваетесь с ним. - person Rob Pridham; 01.02.2013

Это можно сделать с помощью межпроцессного взаимодействия. У вас есть несколько вариантов:

1- Вы можете использовать SharedPreferences. Установите предпочтение WORLD_READABLE из вашего приложения, чтобы оно читалось при каждом запуске из вашего целевого приложения. Взгляните на это.

2- Вы можете записать это предпочтение в файл на SD-карте и прочитать его таким же образом.

3 – Если ваше целевое приложение запущено (то есть у него есть Служба или что-то еще, поэтому его процесс активен), вы можете передать намерение и получить его от целевого приложения. . Здесь вы можете найти сообщение об этом предмет.

4- ... Короче говоря, вам нужно передать параметр целевому приложению и установить ориентацию, как в setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

person Alpay    schedule 29.01.2013
comment
Приложение, ориентацию которого я хотел бы изменить, не является моим приложением - person Mr Coder; 31.01.2013
comment
Все приложения на устройствах Android находятся в отдельных песочницах. Если и приложение для изменения, и приложение для смены не принадлежат вам и вы не спроектировали их особым образом, о котором я упоминал выше, будет и должно изменить свойства другого приложения, как ориентация экрана. Хотели бы вы, чтобы какое-то не относящееся к делу приложение изменило свойства вашего приложения без вашего разрешения? - person Alpay; 31.01.2013
comment
это может показаться невозможным, но вот приложение, которое делает это play.google.com/store/apps/ - person Mr Coder; 31.01.2013