2016-10-26 3 views
1

iOS에서는 기기 방향이 인터페이스 방향과 다를 수 있으므로 두 개의 서로 다른 열거 형이 있습니다. 나는 열거 형을 반드시 찾지는 않는다. 안드로이드는 동일한 구별을합니까? 장치보다는 인터페이스 방향 변경을 감지하고 싶습니다.UIDeviceOrientation과 UIInterfaceOrientation의 Android에 해당하는 항목은 무엇입니까?

사람들은 방향 변경을 감지하기 위해 onConfigurationChanged()을 사용하는 것 같지만 정확히 어떤 종류의 방향 변경인지 정확하게 알지 못했습니다.

onCreate 내부 :

initOrientation();

getResources().getConfiguration().orientationsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

나는 모든 방향을 잡기 위해 이러한 방법을 사용하고 있습니다 :

답변

0

이 방법은 설정 방향을 감지 (과) 수

어디

private void initOrientation() { 
     mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
     mLastRotation = mWindowManager.getDefaultDisplay().getRotation(); 
     myOrientationEventListener 
     = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI){ 
     @Override 
     public void onOrientationChanged(int orientation) { 
//   Log.d(TAG, "ORIENTATION: " + orientation); 
     Display display = mWindowManager.getDefaultDisplay(); 
     int rotation = display.getRotation(); 
     if (((rotation == Surface.ROTATION_90 && mLastRotation == Surface.ROTATION_270) 
       || (rotation == Surface.ROTATION_270 && mLastRotation == Surface.ROTATION_90) 
       || (rotation == Surface.ROTATION_0 && mLastRotation == Surface.ROTATION_180) 
       || (rotation == Surface.ROTATION_180 && mLastRotation == Surface.ROTATION_0))) { 
      //if ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && rotation != mLastRotation) { 
      Log.i(TAG, "changed >>> " + rotation + " :: " + _.mWidth); 

      // do something 

      mLastRotation = rotation; 
     } 
     } 
     }; 

      if (myOrientationEventListener.canDetectOrientation()){ 
      Toast.makeText(this, "Can DetectOrientation", Toast.LENGTH_LONG).show(); 
      myOrientationEventListener.enable(); 
      } 
      else{ 
      Toast.makeText(this, "Can't DetectOrientation", Toast.LENGTH_LONG).show(); 
      // finish(); 
      } 
    } 

당신이 정말로 실현하고 싶은 것에 따라 다릅니다. 위의 방법은 세로> 세로 및 가로> 가로 이동을 감지 할 수 있습니다. 잠금을 강제로 나는이 방법을 사용하고 회전 해제하기 위해

:

protected void mLockScreenRotation(int i) 
{ 
    // Stop the screen orientation changing during an event 
    switch (i) 
    { 
    default: 
    case 0: 
     switch (this.getResources().getConfiguration().orientation) 
     { 
      case Configuration.ORIENTATION_PORTRAIT: 
       this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
       break; 
      case Configuration.ORIENTATION_LANDSCAPE: 
       this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
       break; 
     } 
    case 1: 
     this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     break; 
    case 2: 
     this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     break; 
    } 
} 

mLockScreenRotation(0) -이 센서 관리자와 흥미로운 접근 방식이다

+0

을 잠급니다. 화면이 잠겨 있거나 앱이 일시 중지/배경으로 표시되면 로테이션 업데이트를 받으나요? – Mark13426

+0

@ Mark13426, 나는 그 활동에 대해 말하지 않고, 내가 배경막에서 어떻게 작동하는지에 대해서 흥미 롭다. 하지만이 코드는 작동해야하는 포 그라운드 서비스에서 사용할 수 있습니다. – Vyacheslav

+0

@ Mark13426, 나는 내 게시물을 편집하고 또 하나의 방법을 썼다. – Vyacheslav

관련 문제