Android 3.2 API

API 수준: 13

Android 3.2 (HONEYCOMB_MR2)는 사용자와 개발자를 위한 새로운 기능을 추가하는 증분 플랫폼 출시입니다. 아래 섹션에서는 새로운 기능과 개발자 API에 대한 개요를 제공합니다.

개발자는 Android 3.2 플랫폼을 Android SDK용 다운로드 가능한 구성요소로 사용할 수 있습니다. 다운로드 가능한 플랫폼에는 Android 라이브러리 및 시스템 이미지와 더불어 에뮬레이터 스킨 등이 포함되어 있습니다. Android 3.2용 개발 또는 테스트를 시작하려면 Android SDK Manager를 사용하여 플랫폼을 SDK에 다운로드합니다.

플랫폼 하이라이트

신규 사용자 기능

  • 더 다양한 태블릿에 최적화

    Android 3.2에는 더 다양한 태블릿 기기에서 우수한 사용자 환경을 제공하기 위한 시스템 전반의 다양한 최적화가 포함되어 있습니다.

  • 고정 크기 앱의 호환성 확대/축소

    Android 3.2에서는 사용자가 더 큰 기기에서 고정 크기 앱을 볼 수 있는 새로운 방법을 제공하는 새로운 호환성 확대/축소 모드를 도입합니다. 이 새로운 모드는 태블릿과 같이 더 큰 화면 크기에서 실행되도록 설계되지 않은 앱을 위해 표준 UI 늘리기에 대한 대안으로 픽셀 크기 조정을 제공합니다. 호환성 지원이 필요한 앱의 경우 사용자가 시스템 표시줄의 메뉴 아이콘에서 새 모드에 액세스할 수 있습니다.

  • SD 카드에서 미디어 동기화하기

    이제 SD 카드를 지원하는 기기에서 사용자가 미디어 파일을 SD 카드에서 미디어 파일을 사용하는 앱으로 직접 로드할 수 있습니다. 시스템 시설을 사용하면 앱이 시스템 미디어 저장소에서 파일에 액세스할 수 있습니다.

새로운 개발자 기능

  • 화면 지원을 위한 확장 API

    Android 3.2에서는 개발자가 다양한 Android 지원 기기에서 애플리케이션 UI를 관리할 수 있는 추가 방법을 제공하기 위해 플랫폼의 화면 지원 API 확장 프로그램을 도입했습니다. API에는 일반화된 크기 카테고리에 의존하지 않고 앱이 다양한 크기로 표시되는 방식을 더 정밀하게 제어할 수 있는 새로운 리소스 한정자와 새 매니페스트 속성이 포함되어 있습니다.

    고정된 크기의 앱과 다양한 화면 크기를 제한적으로 지원하는 앱을 위한 최상의 디스플레이를 보장하기 위해, 플랫폼은 작은 화면 영역에서 UI를 렌더링한 다음 이를 확장하여 디스플레이에서 사용 가능한 공간을 채우는 새로운 확대/축소 호환성 모드도 제공합니다. 화면 지원 API 및 화면 지원 API에서 제공하는 컨트롤에 관한 자세한 내용은 아래 섹션을 참고하세요.

API 개요

Screens Support API

Android 3.2에는 다양한 화면 크기에서 애플리케이션이 표시되는 방식을 더 세밀하게 제어할 수 있는 새로운 화면 지원 API가 도입되었습니다. 이 API는 플랫폼의 일반화된 화면 밀도 모델을 비롯한 기존 화면 지원 API를 기반으로 하지만, 일반화된 화면 크기 (예: large 또는 xlarge)가 아닌 밀도 독립형 픽셀 단위 (예: 너비 600dp 또는 720dp)로 측정된 크기를 기준으로 특정 화면 범위를 정확하게 타겟팅하는 기능으로 확장합니다.

애플리케이션의 UI를 디자인할 때는 여전히 플랫폼을 사용하여 밀도 추상화를 제공할 수 있습니다. 즉, 애플리케이션은 기기 간의 실제 픽셀 밀도 차이를 보상할 필요가 없습니다. 사용 가능한 가로 또는 세로 공간의 양에 따라 애플리케이션 UI를 디자인할 수 있습니다. 플랫폼은 새로운 세 가지 특성인 smallestWidth, width, height를 사용하여 사용 가능한 공간을 표현합니다.

  • 화면의 smallestWidth는 밀도 독립형 픽셀 ('dp') 단위로 측정된 기본 최소 크기입니다. 화면의 높이나 너비 중에서 둘 중 더 짧은 값입니다. 세로 모드 화면의 경우 일반적으로 smallestWidth는 너비를 기반으로 하지만 가로 모드 화면의 경우 높이를 기반으로 합니다. 모든 경우에 smallestWidth는 화면의 고정된 특성에서 파생되며 방향에 관계없이 값이 변경되지 않습니다. smallestWidth는 시스템에서 예약한 화면 영역을 제외하고 애플리케이션 UI를 그려야 하는 가장 짧은 너비를 나타내므로 애플리케이션에 중요합니다.
  • 반대로 화면의 너비높이는 현재 애플리케이션 레이아웃에 사용할 수 있는 가로 또는 세로 공간을 나타내며, 'dp' 단위로 측정되며 시스템에 의해 예약된 화면 영역은 포함되지 않습니다. 사용자가 가로 모드와 세로 모드 간에 방향을 전환하면 화면의 너비와 높이가 변경됩니다.

새로운 화면 지원 API는 현재 화면의 smallestWidth에 따라 애플리케이션 UI를 관리할 수 있도록 설계되었습니다. 필요에 따라 현재 너비 또는 높이에 따라 UI를 관리할 수도 있습니다. 이러한 목적으로 API는 다음과 같은 도구를 제공합니다.

  • 레이아웃 및 기타 리소스를 최소 smallestWidth, 너비 또는 높이로 타겟팅하는 새로운 리소스 한정자
  • 앱의 최대 화면 호환 범위를 지정하기 위한 새로운 매니페스트 속성

또한 애플리케이션은 이전 버전의 플랫폼에서와 같이 계속 시스템을 쿼리하고 런타임에 UI 및 리소스 로드를 관리할 수 있습니다.

새 API를 사용하면 smallestWidth, width, height를 통해 화면을 더 직접적으로 타겟팅할 수 있으므로 다양한 화면 유형의 일반적인 특성을 이해하는 것이 좋습니다. 아래 표에는 'dp' 단위로 측정된 몇 가지 예가 나와 있습니다.

표 1. 밀도와 크기가 dp인 일반적인 기기

유형 밀도 (일반화) 크기 (dp) smallestWidth (dp)
기준 전화 mdpi 320x480 320
소형 태블릿/대형 휴대전화 mdpi 480x800 480
7인치 태블릿 mdpi 600x1024 600
10인치 태블릿 mdpi 800x1280 800

아래 섹션에서는 새로운 화면 한정자 및 매니페스트 속성에 대해 자세히 설명합니다. 화면 지원 API를 사용하는 방법에 관한 자세한 내용은 여러 화면 지원을 참고하세요.

화면 지원을 위한 새로운 리소스 한정자

Android 3.2의 새로운 리소스 한정자를 사용하면 다양한 화면 크기에 맞게 레이아웃을 더 효과적으로 타겟팅할 수 있습니다. 한정자를 사용하면 밀도 독립형 픽셀로 측정된 특정 최소 smallestWidth, 현재 너비 또는 현재 높이에 맞게 설계된 리소스 구성을 만들 수 있습니다.

새로운 한정자는 다음과 같습니다.

  • swNNNdp - 리소스를 사용해야 하는 최소 smallestWidth를 'dp' 단위로 측정하여 지정합니다. 위에서 언급했듯이 화면의 smallestWidth는 방향과 상관없이 일정합니다. 예: sw320dp, sw720dp, sw720dp
  • wNNNdphNNNdp: 리소스가 사용되어야 하는 최소 너비 또는 높이를 지정하며 'dp' 단위로 측정됩니다. 위에서 언급한 대로 화면의 너비와 높이는 화면의 방향에 따라 달라지며 방향이 변경될 때마다 변경됩니다. 예시: w320dp, w720dp, h1024dp.

필요한 경우 중복되는 리소스 구성을 여러 개 만들 수도 있습니다. 예를 들어 480dp보다 넓은 화면에 사용할 리소스에 태그를 지정하고, 600dp보다 넓은 화면에 사용할 리소스에 태그를 지정하고, 720dp보다 넓은 화면에 사용할 리소스에 태그를 지정할 수 있습니다. 주어진 화면에서 여러 리소스 구성이 검증된 경우 시스템은 가장 근접하게 일치하는 구성을 선택합니다. 특정 화면에 로드되는 리소스를 정확하게 제어하려면 한 개의 한정자로 리소스에 태그를 지정하거나 여러 개의 새 또는 기존 한정자를 결합하면 됩니다.

앞서 나열된 일반적인 측정기준을 기반으로 새 한정자를 사용하는 방법의 예는 다음과 같습니다.

res/layout/main_activity.xml   # For phones
res/layout-sw600dp/main_activity.xml   # For 7” tablets
res/layout-sw720dp/main_activity.xml   # For 10” tablets
res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
res/layout-sw600dp-w720dp/main_activity.xml   # For large width

이전 버전의 플랫폼은 새 한정자를 무시하므로 필요에 따라 한정자를 혼합하여 모든 기기에서 앱이 멋지게 표시되도록 할 수 있습니다. 다음은 몇 가지 예입니다.

res/layout/main_activity.xml   # For phones
res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets

새 한정자를 사용하는 방법에 관한 자세한 내용은 새 크기 한정자 사용을 참고하세요.

화면 크기 호환성을 위한 새로운 매니페스트 속성

프레임워크는 다양한 화면 크기에 관한 앱의 지원을 관리할 수 있는 새로운 <supports-screens> 매니페스트 속성 세트를 제공합니다. 특히 앱이 실행되도록 설계된 최대 및 최소 화면과 시스템의 새 화면 호환 모드가 필요하지 않은 최대 화면을 지정할 수 있습니다. 위에서 설명한 리소스 한정자와 마찬가지로, 새 매니페스트 속성은 smallestWidth로 지정된 대로 애플리케이션이 지원하는 화면 범위를 지정합니다.

화면 지원을 위한 새로운 매니페스트 속성은 다음과 같습니다.

  • android:compatibleWidthLimitDp="numDp": 이 속성을 사용하면 호환성 모드가 필요하지 않고 애플리케이션이 실행될 수 있는 최대 smallestWidth를 지정할 수 있습니다. 현재 화면이 지정된 값보다 크면 시스템은 애플리케이션을 일반 모드로 표시하지만 사용자는 시스템 표시줄의 설정을 통해 선택적으로 호환성 모드로 전환할 수 있습니다.
  • android:largestWidthLimitDp="numDp": 이 속성을 사용하면 애플리케이션이 실행되도록 설계된 최대 smallestWidth를 지정할 수 있습니다. 현재 화면이 지정된 값보다 큰 경우 시스템은 애플리케이션을 화면 호환성 모드로 강제 전환하여 현재 화면에서 최상의 디스플레이를 보장합니다.
  • android:requiresSmallestWidthDp="numDp" - 이 속성을 사용하면 애플리케이션이 실행될 수 있는 최소 smallestWidth를 지정할 수 있습니다. 현재 화면이 지정된 값보다 작으면 시스템은 애플리케이션이 기기와 호환되지 않는다고 간주하지만 애플리케이션의 설치 및 실행을 방지하지는 않습니다.

참고: 현재 Google Play는 위의 속성을 기준으로 앱을 필터링하지 않습니다. 필터링 지원은 향후 플랫폼 출시에서 추가될 예정입니다. 화면 크기를 기반으로 필터링이 필요한 애플리케이션은 기존 <supports-screens> 속성을 사용할 수 있습니다.

새 속성을 사용하는 방법에 관한 자세한 내용은 화면 크기 지원 선언을 참고하세요.

화면 호환 모드

Android 3.2에서는 실행 중인 화면만큼 큰 화면을 지원하지 않는다고 명시적으로 선언하는 애플리케이션을 위한 새로운 화면 호환성 모드를 제공합니다. 이 새로운 '확대/축소' 모드는 픽셀 크기 조정입니다. 즉, 더 작은 화면 영역에서 애플리케이션을 렌더링한 다음 픽셀 크기를 조정하여 현재 화면을 채웁니다.

기본적으로 시스템은 화면 호환 모드가 필요한 앱을 위해 사용자 옵션으로 화면 호환 모드를 제공합니다. 사용자는 시스템 바에서 제공되는 컨트롤을 사용하여 확대/축소 모드를 켜거나 끌 수 있습니다.

새 화면 호환 모드는 일부 애플리케이션에 적합하지 않을 수 있으므로 플랫폼에서는 애플리케이션이 매니페스트 속성을 사용하여 새 화면 호환 모드를 사용 중지할 수 있도록 허용합니다. 앱에서 사용 중지하면 시스템은 앱이 실행 중일 때 사용자에게 '확대/축소' 호환성 모드를 옵션으로 제공하지 않습니다.

참고: 애플리케이션에서 호환성 모드를 제어하는 방법에 관한 중요한 정보는 Android 개발자 블로그의 대형 화면 앱용 새로운 모드 도움말을 참고하세요.

720p TV 및 유사 기기의 새로운 화면 밀도

720p TV 또는 중간 밀도 화면과 유사한 기기에서 실행되는 애플리케이션의 요구사항을 충족하기 위해 Android 3.2에서는 대략 213dpi의 새로운 일반화된 밀도 tvdpi를 도입합니다. 애플리케이션은 densityDpi에서 새 밀도를 쿼리할 수 있으며 새 tvdpi 한정자를 사용하여 TV 및 유사 기기의 리소스에 태그를 지정할 수 있습니다. 예를 들면 다음과 같습니다.

res/drawable-tvdpi/my_icon.png   # Bitmap for tv density

일반적으로 애플리케이션은 이 밀도로 작동할 필요가 없습니다. 720p 화면에 출력이 필요한 경우 플랫폼에서 UI 요소를 자동으로 크기 조절할 수 있습니다.

UI 프레임워크

  • 프래그먼트
    • Fragment.SavedState 클래스는 saveFragmentInstanceState()를 통해 프래그먼트 인스턴스에서 검색된 상태 정보를 보유합니다.
    • 새 메서드 saveFragmentInstanceState()는 지정된 Fragment의 현재 인스턴스 상태를 저장합니다. 이 상태는 나중에 현재 상태와 일치하는 Fragment의 새 인스턴스를 만들 때 사용할 수 있습니다.
    • 새 메서드 setInitialSavedState()는 처음 생성될 때 Fragment의 초기 저장된 상태를 설정합니다.
    • onViewCreated() 콜백 메서드는 저장된 상태가 뷰에 복원되기 전에 onCreateView()이 반환되었다고 프래그먼트에 알립니다.
    • isDetached() 메서드는 프래그먼트가 UI에서 명시적으로 분리되었는지 확인합니다.
    • attach()detach() 메서드를 사용하면 애플리케이션이 UI에서 프래그먼트를 다시 연결하거나 분리할 수 있습니다.
    • setCustomAnimations() 오버로드 메서드를 사용하면 진입/종료 작업과 특히 백 스택을 팝할 때 실행할 특정 애니메이션 리소스를 설정할 수 있습니다. 기존 구현은 백 스택을 팝할 때 프래그먼트의 다양한 동작을 고려하지 않습니다.
  • ActivityInfo 및 ApplicationInfo의 화면 크기 정보
  • WindowManager에서 디스플레이 크기를 가져오는 도우미
    • 새 메서드 getSize()getRectSize()를 사용하면 애플리케이션이 디스플레이의 원시 크기를 가져올 수 있습니다.
  • 새로운 공개 '홀로그램' 스타일
    • 이제 플랫폼에서 텍스트, 작업 모음 위젯 및 탭 등에 다양한 공개 '홀로그래픽' 스타일을 노출합니다. 전체 목록은 R.style를 참고하세요.
  • LocalActivityManager, ActivityGroup, LocalActivityManager가 지원 중단되었습니다.
    • 새 애플리케이션에서는 이러한 클래스 대신 Fragment를 사용해야 합니다. 이전 버전의 플랫폼에서 계속 실행하려면 Android SDK에서 제공되는 v4 지원 라이브러리 (호환성 라이브러리)를 사용하면 됩니다. v4 지원 라이브러리는 Android 1.6 (API 수준 4)까지 호환되는 Fragment API 버전을 제공합니다.
    • Android 3.0 (API 수준 11) 이상을 대상으로 개발하는 앱의 경우 탭은 일반적으로 작업 표시줄 영역에 탭을 배치하기 위한 새로운 ActionBar.newTab() 및 관련 API를 사용하여 UI에 표시됩니다.

미디어 프레임워크

  • 이제 플랫폼의 미디어 제공업체 (MediaStore)를 사용하는 애플리케이션은 기기에서 지원되는 경우 이동식 SD 카드에서 직접 미디어 데이터를 읽을 수 있습니다. 애플리케이션은 MTP API를 사용하여 SD 카드 파일과 직접 상호작용할 수도 있습니다.

그래픽

IME 프레임워크

  • 수정자 키의 현재 상태를 검색하는 새로운 getModifiers() 메서드

USB 프레임워크

  • 기기의 원시 USB 설명자를 가져오는 새로운 getRawDescriptors() 메서드 이 메서드를 사용하여 상위 수준 API를 통해 직접 지원되지 않는 설명어에 액세스할 수 있습니다.

네트워크

전화 통신

핵심 유틸리티

  • Parcelable 유틸리티
  • 바인더 및 IBinder
    • BinderIBinder의 새 메서드 dumpAsync()를 사용하면 애플리케이션이 지정된 파일에 덤프하여 대상이 비동기식으로 실행되도록 할 수 있습니다.
    • 새로운 IBinder 프로토콜 트랜잭션 코드 TWEET_TRANSACTION를 사용하면 애플리케이션이 타겟 객체에 트윗을 보낼 수 있습니다.

새로운 기능 상수

플랫폼은 애플리케이션 매니페스트에서 선언할 수 있는 새로운 하드웨어 기능 상수를 추가하여 Google Play와 같은 외부 항목에 필요한 하드웨어 및 소프트웨어 기능을 알립니다. 이러한 상수와 기타 기능 상수는 <uses-feature> 매니페스트 요소에서 선언합니다.

Google Play는 <uses-feature> 속성을 기반으로 애플리케이션을 필터링하여 요구사항을 충족하는 기기에서만 애플리케이션을 사용할 수 있도록 합니다.

  • 가로 모드 또는 세로 모드 요구사항을 위한 기능 상수

    Android 3.2에서는 애플리케이션이 가로 모드 방향, 세로 모드 방향 또는 둘 다의 디스플레이가 필요한지 지정할 수 있는 새로운 기능 상수를 도입합니다. 이러한 상수를 선언하면 연결된 방향을 제공하지 않는 기기에 애플리케이션을 설치하면 안 된다는 것을 나타냅니다. 반대로 상수 중 하나 또는 둘 다 선언되지 않은 경우 애플리케이션에 선언되지 않은 방향에 대한 환경설정이 없으며 이러한 방향을 제공하지 않는 기기에 설치될 수 있음을 나타냅니다.

    가로 모드와 세로 모드 방향에서 모두 제대로 작동하는 일반적인 애플리케이션은 일반적으로 방향 요구사항을 선언할 필요가 없습니다. 텔레비전용으로 설계된 앱과 같이 주로 하나의 방향에 맞게 설계된 애플리케이션은 상수 중 하나를 선언하여 해당 방향을 제공하지 않는 기기에서 사용하지 못하도록 할 수 있습니다.

    매니페스트에 선언된 활동이 android:screenOrientation 속성을 사용하여 특정 방향으로 실행되도록 요청하는 경우 이는 애플리케이션에 이 방향이 필요하다고 선언합니다.

  • 기타 기능 상수

API 차이점 보고서

Android 3.2 (API 수준 13)의 모든 API 변경사항에 관한 자세한 내용은 API 차이점 보고서를 참고하세요.

API 수준

Android 3.2 플랫폼은 업데이트된 버전의 프레임워크 API를 제공합니다. Android 3.2 API에는 시스템 자체에 저장되는 정수 식별자(13)가 할당됩니다. 'API 수준'이라고 하는 이 식별자를 사용하면 애플리케이션을 설치하기 전에 시스템이 애플리케이션이 시스템과 호환되는지 올바르게 판단할 수 있습니다.

애플리케이션에서 Android 3.2에 도입된 API를 사용하려면 Android 3.2 SDK 플랫폼에 제공된 Android 라이브러리에 대해 애플리케이션을 컴파일해야 합니다. 필요에 따라 애플리케이션 매니페스트의 <uses-sdk> 요소에 android:minSdkVersion="13" 속성을 추가해야 할 수도 있습니다.

자세한 내용은 API 수준이란 무엇인가요?를 참고하세요.