Android

기기 이벤트 수신 (windowinfotracker, consumer이용)

Dean83 2022. 6. 7. 10:06

0. build.gradle 추가  

implementation "androidx.window:window:1.1.0-alpha02"
implementation "androidx.window:window-java:1.1.0-alpha02"

 

1. 이벤트를 수신할 클래스에 변수 추가

    - WindowInfoTrackerCallbackAdaper 형 변수 및 LayoutStateChangeCallback 변수 추가

private WindowInfoTrackerCallbackAdapter windowInfoTracker;
private final LayoutStateChangeCallback layoutStateChangeCallback =
      new LayoutStateChangeCallback();

2. LayoutStateChangeCallback 클래스 생성 및 accept 함수 생성
    - 서브 클래스로 생성한다. 

    - Consumer 클래스를 상속 받는다. 

class LayoutStateChangeCallback implements androidx.core.util.Consumer<WindowLayoutInfo> {
   

    @Override
    public void accept(WindowLayoutInfo windowLayoutInfo) {
     
      List<DisplayFeature> displayFeatureList = windowLayoutInfo.getDisplayFeatures();
      for (DisplayFeature feature : displayFeatureList)
      {
          ...
      }
    }
    
 }

 

3. WindowInfoTrackerCallbackAdaper 변수 할당 및 리스너 등록
     - 적절한 곳 (예 : onCreate)에서 1. 에서 생성한 변수 메모리 할당 및 리스너를 등록한다. 
   

//메모리 할당
windowInfoTracker = new WindowInfoTrackerCallbackAdapter(WindowInfoTracker.getOrCreate(this));

//이벤트 리스너 등록. 위에서 작성한 서브클래스 변수를 인자로 전달
 windowInfoTracker.addWindowLayoutInfoListener(this,Runnable::run,layoutStateChangeCallback);
 
 //이벤트 리스너 해제. onStop 또는 dispose 등 필요한 곳에 코드 추가
 windowInfoTracker.removeWindowLayoutInfoListener(layoutStateChangeCallback);

이렇게 하게되면, 기기의 layoutstate가 변경될 때 마다 accept함수가 호출된다. 

응용하여 다른 이벤트를 수신할 수도 있다.