2010-12-27 13 views
4

私はWallpaperManager.getDrawable()を使用して現在の壁紙を取得し、次にそれをビットマップに変換して別のことを行います。私は時々、デバイスが連続的に回転するときに壁紙の間違ったデータを取得することがわかります。たとえば、デバイスが横長モードの場合、壁紙の幅と高さは縦長です。アンドロイドの壁紙の向きを検出する方法

壁紙の現在の向きや壁紙の向きに関する関連データを知る方法を知っている人はいますか?

+0

このことができますかどうかわかりませんか? – fuzz

答えて

0

これが役立つかどうかわかりませんか?

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

上記のコードが返されます:私はこの答えはほぼ一年遅れているが、うまくいけば、次は自分の壁紙の向きを決定しようとしている他の人のためのソリューションを提供することを実現

How to handle screen orientation change when progress dialog and background thread active?

1

整数は、Surface.ROTATION_0,Surface.ROTATION_90,Surface.ROTATION_180またはSurface.ROTATION_270に等しい。

注:thisは、WallpaperServiceを指します。ここで

0

あなたが向きを任意のコンテキストを与え得ることができます。

@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 
} 
関連する問題