2013-01-26 5 views
1

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

После некоторого R & D Я пришел к выводу, что аналогичные приложения (которые меняют ориентацию) также запускают службу, это означает, что они меняют ориентацию на лету, но я не знаю, как именно они это делают.

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

+0

Полезно? - http://developer.samsung.com/android/technical-docs/Handling-Orientation-in-Android – TN888

+0

Вы имеете в виду ориентацию экрана? – Alpay

+0

@Alpay да, чтобы изменить ориентацию экрана другого приложения. –

ответ

2

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

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

Есть два компонента подхода:

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

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

Есть несколько примеров части 1 в другом месте на SO. В моем случае я написал службу, которая постоянно опроса, чтобы узнать, что такое приложение переднего плана (потому что для уведомления об изменении приложения нет соответствующих системных событий). Это не тривиальное начинание, но это можно сделать.

Соответствующая установка для куска 2 - Settings.System.ACCELEROMETER_ROTATION. Я думаю, вы можете написать это с помощью обычного разрешения на все версии. Фрагмент кода, который находится ниже:

 Settings.System.putInt(
      app.getContentResolver(), 
      Settings.System.ACCELEROMETER_ROTATION, 
      orientationEnabled ? 1 : 0 
     ); 

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

+0

спасибо за ваш ответ, можете ли вы предоставить псевдокод для шт 1, а значит, опрос, чтобы проверить работоспособность и конечный статус приложения? –

+0

Не так, но [это] (http://stackoverflow.com/questions/6363207/android-background-service-to-determine-foreground-application) выглядит как разумная отправная точка. На практике вы обнаружите, что существуют различные тонкости; как один пример, приложения, которые вызывается для обработки широковещательной передачи, но визуально не отображаются, рассматриваются как находящиеся на переднем плане, но это то, о чем вам, вероятно, следует обратиться с новым вопросом SO, когда вы его встретите. –

1

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

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

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

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

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

+0

Приложение, ориентация которого я бы хотел изменить, не является моим приложением –

+0

Приложения на устройствах Android - все проживают в своих отдельных песочницах. Если и изменение, и приложение чейнджера не являются вашими, и вы их специально создаете, я упомянул выше, это _will_ и _should_ невозможно изменить свойства другого приложения, такие как ориентация экрана. Вы хотите, чтобы какое-то неуместное приложение изменило свойства вашего приложения без вашего разрешения? – Alpay

+0

это может показаться невозможным, но вот приложение, которое делает это https://play.google.com/store/apps/details?id=net.xdevelop.rotator_t&hl=ru –

Смежные вопросы