当打开应用程序并更改方向时,如何防止动态壁纸方向改变?

11

我写的动态壁纸出现了方向问题。基本上,画布会根据打开在其上方的应用程序而旋转。我测试了一下,发现从先前打开的应用程序返回到主屏幕时会触发onSurfaceChanged()方法。

我想更好的问题是:为什么我的动态壁纸表面在打开应用并更改其方向时会发生变化?有没有办法防止我的动态壁纸方向永远不发生变化?谢谢,希望这样说得清楚?


你在清单文件中定义了方向吗?或者是通过编程实现的?如果没有,那么这个问题的答案应该能帮到你:链接 - gary
在动态壁纸中,除了设置活动外,永远不会使用任何其他活动。LWP扩展了WallpaperService,在其中通过onCreateEngine()函数创建Engine类的实例。 - worked
我们能获取更多信息吗?有哪些应用程序会导致这种情况发生?方向是永久性的还是只是临时性的,直到主屏幕被重新绘制?一些应用程序,如内置相机,实际上会强制屏幕改变方向,但是当应用程序完成后,这些更改会被撤消。 - Music Monkey
2个回答

2

您可以使用以下方法从android.service.wallpaper.WallpaperService.Engine类中处理屏幕方向:

public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height)

只需相应地处理事件即可。

不能向WallpaperService(创建动态壁纸时使用的服务)添加android:configChangesandroid:screenOrientation

我本来想将此作为对“Anirudha”答案的评论添加,但我没有足够的声望来这样做。


1

当屏幕方向改变时,Android应用程序会重新启动活动。 您可以使用以下方法之一

  1. android:configChanges 在您的清单中声明。默认情况下,当运行时发生配置更改时,活动将被关闭并重新启动,但使用此属性声明配置将防止活动被重新启动。相反,活动保持运行状态,并调用其 onConfigurationChanged() 方法。
  2. 使用android:screenOrientatin = "portrait" 或 "landscape",它将强制应用程序在指定的模式下运行。但是,它不能防止活动被关闭和重新启动。

你好,为什么活动被强制重新启动,如何防止这种情况发生,特别是在动态壁纸的情况下。 - Maysam Torabi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接