Как определить ориентацию обоев в Android - PullRequest
4 голосов
/ 27 декабря 2010

Я использую WallpaperManager.getDrawable(), чтобы получить текущие обои, а затем преобразовать их в растровое изображение, чтобы сделать что-то еще. Я обнаружил, что иногда я получаю неправильные данные обоев, когда устройство постоянно вращается. Например, ширина и высота обоев соответствует портретному, когда устройство находится в ландшафтном режиме.

Кто-нибудь знает, как определить текущую ориентацию обоев или связанные с ними данные об ориентации обоев?

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Я понимаю, что этот ответ опоздал почти на год, но, надеюсь, следующее поможет другим определить их ориентацию:

((WindowManager) 
this.getApplication().getSystemService(Service.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();

приведенный выше код вернет целое числоравно Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180 или Surface.ROTATION_270.

Примечание: this относится к WallpaperService.

0 голосов
/ 13 февраля 2018

Здесь вы можете получить ориентацию в любом контексте:

@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
}
0 голосов
/ 05 января 2011
...