Android에서 스마트폰 혹은 태블릿인지 판단하기

NamYounSu·2021년 10월 17일
0
post-thumbnail

대충 위와 같은 짤 같은 내용이다. 정말 웅장하다.

서론

이번에도 외주다. 난데없는 요청 사항 중 하나가 "태블릿 일 경우에만 앱이 작동해야하고, 이외의 경우에는 앱이 꺼질 수 있도록 해주세요" 였다.

태블릿일 경우에는 Project 자체 설정이나, 마켓에 올릴 때 강제를 하면 되긴 하나. 이 앱은 또 자체 apk로도 배포를 할 거라고 한다. 정말 외주답다

하여 찾아보니 아래와 같은 2가지 방법으로 적용 가능 할 것 같다.

적용 방법

첫번째는 코드 상에서 직접 처리를 해 주는 방법이다. 코드는 아래와 같다.

    private void CheckTableView() {
        int screenSizeType = this.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;

        if (!(screenSizeType == Configuration.SCREENLAYOUT_SIZE_LARGE || screenSizeType == Configuration.SCREENLAYOUT_SIZE_XLARGE)) {
            Toast.makeText(MainActivity.this, "이 앱은 태블릿 전용 앱 입니다.", Toast.LENGTH_SHORT).show();
            finish();
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }

Configuration.SCREENLAYOUT 은 생소한 개념일 수 있는데, 찾아보니 아래와 같은 방법으로 구분이 가능하다고 한다. (모두 정확하게 들어가진 않지만, 거의 정확하다)

ScreenLayout 크기설명
SCREENLAYOUT_SIZE_UNDEFINED정해지지 않은 크기. 거의 나올일은 없지만. 테스트 기기 중 이젠 보기 힘든 중국산 탭에서 1번 봤다.
SCREENLAYOUT_SIZE_SMALL저해상도 기기 or 초소형 휴대폰들.
SCREENLAYOUT_SIZE_NORMAL평균적인 기기가 여기에 해당된다. 노트시리즈, 홍미노트 이런 기기들도 포함.
SCREENLAYOUT_SIZE_LARGE7인치를 넘어가는 휴대폰들이 해당된다. 가장 쉽게 만나볼 수 있는건 에뮬레이터에서 넥서스7로 설정하면 볼 수 있다.
SCREENLAYOUT_SIZE_XLARGE10인치를 넘어가는 기기들이 이 값을 받는다.

코드로 처리 하는 방법은 많은 기능을 조합할 수 있지만. 설치는 막을 수 없다. 그래서 두번째 방법이 권장되고 있다.

두번째는 manifest에 supports-screens 로 강제하는 방법이다.

<manifest ... >
        <!--태블릿에서만 지원 가능-->
        <supports-screens android:smallScreens="false"
                          android:normalScreens="false"
                          android:largeScreens="true"
                          android:xlargeScreens="true"/>
        ...
</manifest>
    

이렇게 넣어주게 되면 아에 지원되지 않는 앱이라고 설치 과정에서 막히게 된다.

참조

Android: force screen size for manifest
Android: Configuration.SCREENLAYOUT
Android: support multiple screen ratio

profile
The Power of Dreams

0개의 댓글