更改其他应用程序的方向

时间:2013-01-26 14:29:55

标签: android orientation landscape-portrait

我正在创建一个应用程序,它将改变其他已安装的应用程序的方向,通过ApplicationInfo对象读取已安装的其他应用程序的方向很简单,但无法更改它。

在一些R& D之后我注意到类似的应用程序(改变方向)也运行服务,这意味着他们会在飞行中进行方向更改,但我不知道他们是如何做到的。

例如Smart Rotator应用程序https://play.google.com/store/apps/details?id=net.xdevelop.rotator_t&hl=en

2 个答案:

答案 0 :(得分:2)

您引用的其他应用程序会执行与您可能期望的不同的操作。它们可以根据设备的加速度计启用屏幕旋转;也就是说,用户旋转设备并且方向改变。它们没有为任何应用程序设置特定方向。请注意,如果在横向模式下禁用自动旋转,则方向通常会返回到纵向。

之前我和其他应用程序一样。不幸的是,这是我无法分享的专有商业代码。

该方法有两个组成部分:

  1. 检测前台应用程序何时是目标应用程序
  2. 更改系统范围的显示方向偏好
  3. 显然你也必须反过来,即之后再改回来。

    在SO的其他地方有一些例子。在我的情况下,我编写了一个服务,不断轮询以查看前台应用程序是什么(因为没有相关的系统事件来通知应用程序更改)。这不是一项微不足道的事情,但可以做到。

    第2部分的相关设置为Settings.System.ACCELEROMETER_ROTATION。我认为您可以在所有版本上使用普通应用程序权限编写。该代码段如下:

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

    另请注意,可以编写一个忽略系统屏幕旋转的应用程序;即将保持锁定在其设计的任何方向。但这并不常见。

答案 1 :(得分:1)

您可以通过进程间通信来执行此操作。您有几种选择:

1-您可以使用 SharedPreferences 。从应用程序中设置WORLD_READABLE首选项,以便在目标应用程序的每次启动时读取。看看this

2-您可以将此首选项写入SD卡上的文件中并以相同方式读取。

3-如果您的目标应用程序正在运行(即,它具有服务或其他内容,以便其进程处于活动状态),您可以广播意图并从您的目标接收目标应用。 Here您可以找到有关此主题的帖子。

4- ...简而言之,您需要将参数传递给目标应用程序并将方向设置为setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);