我正在创建一个应用程序,它将改变其他已安装的应用程序的方向,通过ApplicationInfo对象读取已安装的其他应用程序的方向很简单,但无法更改它。
在一些R& D之后我注意到类似的应用程序(改变方向)也运行服务,这意味着他们会在飞行中进行方向更改,但我不知道他们是如何做到的。
例如Smart Rotator应用程序https://play.google.com/store/apps/details?id=net.xdevelop.rotator_t&hl=en
答案 0 :(得分:2)
您引用的其他应用程序会执行与您可能期望的不同的操作。它们可以根据设备的加速度计启用屏幕旋转;也就是说,用户旋转设备并且方向改变。它们没有为任何应用程序设置特定方向。请注意,如果在横向模式下禁用自动旋转,则方向通常会返回到纵向。
之前我和其他应用程序一样。不幸的是,这是我无法分享的专有商业代码。
该方法有两个组成部分:
显然你也必须反过来,即之后再改回来。
在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);