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 개요

화면 지원 API

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

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

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

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

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

또한 애플리케이션은 이전 버전의 플랫폼과 마찬가지로 여전히 시스템을 쿼리하고 런타임에 UI 및 리소스 로드를 관리할 수 있습니다.

새 API를 사용하면 smallestWidth, 너비, 높이를 통해 더 직접적으로 화면을 타겟팅할 수 있으므로 다양한 화면 유형의 일반적인 특성을 이해하는 데 도움이 됩니다. 아래 표에는 '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 텔레비전 및 유사 기기의 새로운 화면 밀도

720p 텔레비전이나 보통 밀도 화면을 사용하는 이와 유사한 기기에서 실행되는 애플리케이션의 요구사항을 충족하기 위해 Android 3.2에서는 대략적인 dpi 213을 사용하는 새로운 일반화된 밀도 tvdpi를 도입합니다. 애플리케이션은 densityDpi에서 새 밀도를 쿼리하고 새로운 tvdpi 한정자를 사용하여 텔레비전 및 유사 기기의 리소스에 태그를 지정할 수 있습니다. 예:

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

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

UI 프레임워크

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