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함수가 호출된다.
응용하여 다른 이벤트를 수신할 수도 있다.