我使用WallpaperManager.getDrawable()
方法获取当前的壁纸,然后将其转换为位图以进行其他操作。但是,当设备不断旋转时,有时会获取到错误的壁纸数据。例如,当设备处于横屏模式时,壁纸的宽度和高度大约为竖屏模式的大小。
有人知道如何检测当前壁纸的方向或任何与壁纸方向相关的数据吗?
我使用WallpaperManager.getDrawable()
方法获取当前的壁纸,然后将其转换为位图以进行其他操作。但是,当设备不断旋转时,有时会获取到错误的壁纸数据。例如,当设备处于横屏模式时,壁纸的宽度和高度大约为竖屏模式的大小。
有人知道如何检测当前壁纸的方向或任何与壁纸方向相关的数据吗?
我意识到这个答案几乎晚了一年,但希望以下内容能为其他试图确定他们壁纸方向的人提供解决方案:
((WindowManager)
this.getApplication().getSystemService(Service.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
以上代码将返回一个整数,该整数等于Surface.ROTATION_0
、Surface.ROTATION_90
、Surface.ROTATION_180
或Surface.ROTATION_270
。
注意:this
指的是WallpaperService
。
在这里,您可以获得任何上下文中的方向:
@JvmStatic
fun isInPortraitMode(activity: Activity): Boolean {
val currentOrientation = getCurrentOrientation(activity)
return currentOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || currentOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
@JvmStatic
fun getCurrentOrientation(context: Context): Int {
//code based on https://www.captechconsulting.com/blog/eric-miles/programmatically-locking-android-screen-orientation
val windowManager = context.getSystemService(Service.WINDOW_SERVICE) as WindowManager
val display = windowManager.defaultDisplay
val rotation = display.rotation
val size = Point()
display.getSize(size)
val result: Int//= ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
// if rotation is 0 or 180 and width is greater than height, we have
// a tablet
if (size.x > size.y) {
if (rotation == Surface.ROTATION_0) {
result = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
} else {
result = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
}
} else {
// we have a phone
if (rotation == Surface.ROTATION_0) {
result = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
} else {
result = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
}
}
} else {
// if rotation is 90 or 270 and width is greater than height, we
// have a phone
if (size.x > size.y) {
if (rotation == Surface.ROTATION_90) {
result = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
} else {
result = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
}
} else {
// we have a tablet
if (rotation == Surface.ROTATION_90) {
result = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
} else {
result = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
}
}
return result
}