我正在创建一个应用程序,它将改变其他一些已经安装的应用程序的方向,通过ApplicationInfo对象读取其他安装的应用程序的方向很简单,但没有办法改变它。
经过一些研究和开发,我注意到类似类型的应用程序(改变方向)也运行Service,这意味着它们可以在飞行中改变方向,但我不知道它们到底是如何做到的。
例如,像智能旋转器应用程序这样做的https://play.google.com/store/apps/details?id=net.xdevelop.rotator_t&hl=en
发布于 2013-02-01 05:53:51
您引用的其他应用程序所做的事情可能与您预期的不同。它们基于设备的加速计启用屏幕旋转;也就是说,用户旋转设备,方向发生变化。它们不会为任何应用程序设置特定的方向。请注意,如果在横向模式下禁用自动旋转,则方向通常会返回到纵向。
我以前也做过和其他应用程序一样的事情。不幸的是,这是我无法分享的专有商业代码。
该方法有两个组成部分:
首选项
显然,你也必须反其道而行之,也就是事后再把它改回来。
在SO的其他地方有一些片段1的例子。在我的例子中,我编写了一个不断轮询的服务,以查看前台应用程序是什么(因为没有相关的系统事件来通知应用程序的更改)。这不是一件微不足道的事情,但它是可以做到的。
片段2的相关设置是Settings.System.ACCELEROMETER_ROTATION。我认为你可以在所有版本上使用普通的应用程序权限来编写它。它的代码片段如下:
Settings.System.putInt(
app.getContentResolver(),
Settings.System.ACCELEROMETER_ROTATION,
orientationEnabled ? 1 : 0
);还要注意的是,可以编写一个忽略系统屏幕旋转的应用程序;也就是说,它将在设计的任何方向上保持锁定。不过,这并不常见。
发布于 2013-01-29 18:05:54
您可以通过进程间通信来完成此操作。您有几个选项:
1-您可以使用SharedPreferences。设置应用程序中的WORLD_READABLE首选项,以便在每次从目标应用程序启动时读取。看看this吧。
2-您可以将此首选项写入SD卡上的文件中,并以相同的方式读取它。
3-如果你的目标应用程序正在运行(也就是说,它有一个服务或其他东西,所以它的进程是活动的),你可以广播一个意图并从你的目标应用程序接收它。Here你可以找到一篇关于这个主题的文章。
4- ...简而言之,您需要向目标应用程序传递一个参数,并像在setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);中一样设置方向
https://stackoverflow.com/questions/14537859
复制相似问题