대충 위와 같은 짤 같은 내용이다. 정말 웅장하다.
이번에도 외주다. 난데없는 요청 사항 중 하나가 "태블릿 일 경우에만 앱이 작동해야하고, 이외의 경우에는 앱이 꺼질 수 있도록 해주세요" 였다.
태블릿일 경우에는 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_LARGE | 7인치를 넘어가는 휴대폰들이 해당된다. 가장 쉽게 만나볼 수 있는건 에뮬레이터에서 넥서스7로 설정하면 볼 수 있다. |
SCREENLAYOUT_SIZE_XLARGE | 10인치를 넘어가는 기기들이 이 값을 받는다. |
코드로 처리 하는 방법은 많은 기능을 조합할 수 있지만. 설치는 막을 수 없다. 그래서 두번째 방법이 권장되고 있다.
두번째는 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