Android 3.0 API

API 수준: 11

개발자는 Android 3.0 플랫폼(HONEYCOMB)을 Android SDK의 다운로드 가능한 구성요소로 사용할 수 있습니다. 다운로드 가능한 플랫폼에는 Android 라이브러리, 시스템 이미지, 에뮬레이터 스킨 세트 등이 포함되어 있습니다. 다운로드 가능한 플랫폼에는 외부 라이브러리가 포함되어 있지 않습니다.

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

API 개요

아래 섹션에서는 이전 버전 이후 프레임워크 API의 새로운 기능과 변경사항을 비롯하여 Android 3.0의 새로운 개발자를 위한 새로운 기능에 관한 기술적 개요를 제공합니다.

프래그먼트

프래그먼트는 활동의 고유한 요소를 자체 UI와 수명 주기를 정의하는 자체 포함 모듈로 분리할 수 있게 해주는 새로운 프레임워크 구성요소입니다. 프래그먼트를 만들려면 Fragment 클래스를 확장하고 Activity와 마찬가지로 여러 수명 주기 콜백 메서드를 구현해야 합니다. 그런 다음 단일 활동에 여러 프래그먼트를 결합하여 각 창이 자체 수명 주기 및 사용자 입력을 관리하는 다중 창 UI를 빌드할 수 있습니다.

UI를 제공하지 않고 프래그먼트를 사용할 수도 있으며, 대신 프래그먼트를 활동의 작업자로 사용할 수도 있습니다(예: 활동이 실행되는 동안에만 발생하는 다운로드 진행률 관리).

또한 다음 사항에 유의하세요.

  • 프래그먼트는 독립적이며 여러 활동에서 재사용할 수 있습니다.
  • 활동 내에서 프래그먼트를 추가, 삭제, 교체, 애니메이션 처리할 수 있습니다.
  • 활동에서 관리하는 백 스택에 프래그먼트를 추가하여 프래그먼트가 변경될 때 상태를 보존하고 사용자가 여러 상태를 통해 뒤로 이동하도록 할 수 있습니다.
  • 대체 레이아웃을 제공하면 화면 크기 및 방향에 따라 프래그먼트를 조합하고 일치시킬 수 있습니다.
  • 프래그먼트는 컨테이너 활동에 직접 액세스할 수 있으며 활동의 작업 모음에 항목을 기여할 수 있습니다 (다음에 설명).

활동에서 프래그먼트를 관리하려면 FragmentManager를 사용해야 합니다. 이 API는 프래그먼트와 상호작용하기 위한 여러 API를 제공합니다. 예를 들어 활동에서 프래그먼트를 찾고 백 스택에서 프래그먼트를 삭제하여 이전 상태를 복원합니다.

프래그먼트 추가 또는 삭제와 같은 트랜잭션을 실행하려면 FragmentTransaction를 만들어야 합니다. 그런 다음 add() remove() 또는 replace()와 같은 메서드를 호출할 수 있습니다. 트랜잭션에 실행하려는 모든 변경사항을 적용한 후에는 commit()를 호출해야 합니다. 그러면 시스템이 프래그먼트 트랜잭션을 활동에 적용합니다.

프래그먼트 사용에 관한 자세한 내용은 프래그먼트 문서를 참고하세요. API 데모 애플리케이션에서도 몇 가지 샘플을 사용할 수 있습니다.

작업 모음

작업 모음은 활동 창 상단의 기존 제목 표시줄을 대체합니다. 왼쪽 모서리에 애플리케이션 로고가 있으며 옵션 메뉴의 항목에 대한 새로운 인터페이스를 제공합니다. 또한 작업 모음을 사용하면 다음 작업을 할 수 있습니다.

  • 메뉴 항목을 작업 모음에 '작업 항목'으로 직접 추가합니다.

    메뉴 항목의 XML 선언에서 값이 "ifRoom"android:showAsAction 속성을 포함합니다. 공간이 충분하면 메뉴 항목이 작업 모음에 직접 표시됩니다. 그렇지 않으면 작업 모음 오른쪽에 있는 메뉴 아이콘으로 표시되는 더보기 메뉴에 항목이 배치됩니다.

  • 작업 항목을 위젯 (예: 검색창)으로 대체하여 '작업 뷰'를 만듭니다.

    메뉴 항목의 XML 선언에서 android:actionViewLayout 속성을 레이아웃 리소스와 함께 추가하거나 android:actionViewClass 속성을 위젯의 클래스 이름과 함께 추가합니다. (항목이 작업 모음에 표시되도록 android:showAsAction 속성도 선언해야 합니다.) 작업 모음의 공간이 충분하지 않고 항목이 더보기 메뉴에 표시되는 경우 일반 메뉴 항목처럼 동작하여 위젯을 표시하지 않습니다.

  • 애플리케이션 로고에 작업을 추가하고 맞춤 로고로 교체

    android.R.id.home ID는 애플리케이션 로고에 자동으로 할당되며, 이 ID를 터치하면 시스템에서 활동의 onOptionsItemSelected() 콜백에 전달합니다. 콜백 메서드에서 이 ID에 응답하기만 하면 애플리케이션의 '홈' 활동으로 이동과 같은 작업을 실행할 수 있습니다.

    아이콘을 로고로 바꾸려면 android:logo 속성을 사용하여 매니페스트 파일에서 애플리케이션 로고를 지정한 다음 활동에서 setDisplayUseLogoEnabled(true)를 호출합니다.

  • 프래그먼트의 백 스택을 통해 뒤로 이동하는 탐색경로 추가
  • 프래그먼트를 탐색할 수 있도록 탭 또는 드롭다운 목록을 추가합니다.
  • 테마와 배경으로 작업 모음 맞춤설정

작업 모음은 새로운 홀로그램 테마를 사용하는 모든 애플리케이션의 표준으로, android:minSdkVersion 또는 android:targetSdkVersion"11"로 설정하는 경우에도 표준입니다.

작업 모음에 관한 자세한 내용은 작업 모음 문서를 참고하세요. API 데모 애플리케이션에서도 몇 가지 샘플을 사용할 수 있습니다.

시스템 클립보드

이제 애플리케이션은 텍스트 이외의 데이터를 복사하여 시스템 전체 클립보드로 또는 클립보드에서 붙여넣을 수 있습니다. 잘린 데이터는 일반 텍스트, URI 또는 인텐트일 수 있습니다.

사용자가 복사하려는 데이터에 대한 시스템 액세스 권한을 콘텐츠 제공자를 통해 사용자가 애플리케이션에서 복잡한 콘텐츠 (예: 이미지 또는 데이터 구조)를 복사하여 이 유형의 콘텐츠를 지원하는 다른 애플리케이션에 붙여넣을 수 있습니다.

클립보드 사용을 시작하려면 getSystemService(CLIPBOARD_SERVICE)를 호출하여 전역 ClipboardManager 객체를 가져옵니다.

항목을 클립보드에 복사하려면 새 ClipData 객체를 만들어야 합니다. 이 객체는 각각 단일 항목을 설명하는 하나 이상의 ClipData.Item 객체를 포함합니다. 하나의 ClipData.Item만 포함된 ClipData 객체를 만들려면 newPlainText(), newUri(), newIntent()와 같은 도우미 메서드 중 하나를 사용하면 됩니다. 이러한 도우미 메서드는 각각 제공된 ClipData.Item로 미리 로드된 ClipData 객체를 반환합니다.

클립보드에 ClipData를 추가하려면 ClipboardManager 인스턴스의 setPrimaryClip()에 전달합니다.

그러면 ClipboardManager에서 getPrimaryClip()를 호출하여 클립보드에서 파일을 읽을 수 있습니다 (붙여넣기 위해). 수신한 ClipData를 처리하는 것은 복잡할 수 있으므로 붙여넣기를 시도하기 전에 클립보드에 있는 데이터 유형을 실제로 처리할 수 있는지 확인해야 합니다.

클립보드는 한 번에 잘린 데이터 조각 (ClipData 객체)만 보유하지만 한 ClipData에는 ClipData.Item를 여러 개 포함할 수 있습니다.

자세한 내용은 복사하여 붙여넣기 문서를 참고하세요. API 데모 샘플에서 복사하여 붙여넣기의 간단한 구현을 확인하고 메모장 샘플에서 더 완전한 구현을 확인할 수도 있습니다.

드래그 앤 드롭

새로운 API는 애플리케이션의 사용자 인터페이스에서 드래그 앤 드롭 작업을 단순화합니다. 드래그 작업은 ClipData 객체에 포함된 일종의 데이터를 한 곳에서 다른 곳으로 전송하는 것입니다. 드래그 작업의 시작점과 끝점은 View이므로 드래그 앤 드롭 작업을 직접 처리하는 API는 View 클래스에 있습니다.

드래그 앤 드롭 작업에는 ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED, ACTION_DROP와 같은 여러 드래그 작업으로 정의되는 수명 주기가 있습니다. 각 수명 주기는 DragEvent 객체로 정의됩니다. 드래그 작업에 참여하려는 각 뷰는 이러한 작업을 수신 대기할 수 있습니다.

활동에서 콘텐츠 드래그를 시작하려면 View에서 startDrag()를 호출하여 드래그할 데이터를 나타내는 ClipData 객체, 사용자가 드래그하는 동안 손가락 아래에 표시되는 '그림자'를 쉽게 만들어 주는 View.DragShadowBuilder, 드래그 객체에 관한 정보를 객체를 수신할 수 있는 뷰와 공유할 수 있는 Object를 제공합니다.

View에서 드래그 객체를 수락('드롭' 수신)하려면 setOnDragListener()를 호출하여 OnDragListener로 뷰를 등록합니다. 뷰에서 드래그 이벤트가 발생하면 시스템은 OnDragListeneronDrag()를 호출하여 발생한 드래그 작업의 유형 (예: ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED, ACTION_DROP)을 설명하는 DragEvent를 수신합니다. 드래그하는 동안 시스템은 드래그 아래의 뷰에 onDrag()를 반복적으로 호출하여 드래그 이벤트 스트림을 전달합니다. 수신 뷰는 DragEvent에서 getAction()를 호출하여 onDragEvent()에 전달된 이벤트 유형을 조회할 수 있습니다.

참고: 드래그 이벤트는 ClipData 객체를 포함할 수 있지만 시스템 클립보드와는 관련이 없습니다. 드래그 앤 드롭 작업으로 드래그된 데이터를 시스템 클립보드에 배치하면 안 됩니다.

자세한 내용은 드래그 앤 드롭 문서를 참고하세요. API 데모 애플리케이션과 Honeycomb 갤러리 애플리케이션에서 드래그 앤 드롭의 구현을 확인할 수도 있습니다.

앱 위젯

Android 3.0은 GridView, ListView, StackView, ViewFlipper, AdapterViewFlipper 등 사용자 홈 화면에서 상호작용이 많은 앱 위젯을 위한 여러 가지 새로운 위젯 클래스를 지원합니다.

무엇보다도 새로운 RemoteViewsService를 사용하면 콘텐츠 제공자에서 제공하는 것과 같이 원격 데이터가 지원하는 GridView, ListView, StackView와 같은 위젯을 사용하여 컬렉션이 있는 앱 위젯을 만들 수 있습니다.

AppWidgetProviderInfo 클래스(<appwidget-provider> 요소로 XML에 정의됨)도 새로운 필드 두 개(autoAdvanceViewIdpreviewImage)를 지원합니다. autoAdvanceViewId 필드를 사용하면 앱 위젯의 호스트에서 자동으로 진행해야 하는 앱 위젯 하위 뷰의 뷰 ID를 지정할 수 있습니다. previewImage 필드는 앱 위젯의 미리보기를 지정하고 위젯 선택 도구에서 사용자에게 표시됩니다. 이 필드가 제공되지 않으면 앱 위젯의 아이콘이 미리보기에 사용됩니다.

앱 위젯의 미리보기 이미지를 만드는 데 도움이 되도록 (previewImage 필드에 지정) Android Emulator에는 '위젯 미리보기'라는 애플리케이션이 포함되어 있습니다. 미리보기 이미지를 만들려면 이 애플리케이션을 실행하고 애플리케이션의 앱 위젯을 선택하고 미리보기 이미지를 표시할 방법을 설정한 다음 저장하고 애플리케이션의 드로어블 리소스에 배치합니다.

StackView 앱 위젯날씨 목록 위젯 애플리케이션에서 새로운 앱 위젯 기능의 구현을 확인할 수 있습니다.

상태 표시줄 알림

Notification API는 콘텐츠가 풍부한 상태 표시줄 알림을 더 많이 지원하도록 확장되었으며 새로운 Notification.Builder 클래스를 사용하여 Notification 객체를 쉽게 만들 수 있습니다.

새로운 기능에는 다음이 포함됩니다.

  • setLargeIcon()를 사용하여 알림에 큰 아이콘을 지원합니다. 이는 보통 소셜 애플리케이션에서 알림 소스인 사람의 연락처 사진을 표시하거나 미디어 앱에서 앨범 썸네일을 표시하기 위한 것입니다.
  • 상태 표시줄 티커에서 setTicker()를 사용하여 맞춤 레이아웃을 지원합니다.
  • 대화형 알림 위젯을 위해 PendingIntent가 있는 버튼을 포함하는 맞춤 알림 레이아웃을 지원합니다. 예를 들어 알림은 활동을 시작하지 않고 음악 재생을 제어할 수 있습니다.

콘텐츠 로더

새 프레임워크 API는 Loader 클래스를 사용하여 데이터의 비동기 로드를 용이하게 합니다. 뷰 및 프래그먼트와 같은 UI 구성요소와 함께 사용하여 작업자 스레드에서 데이터를 동적으로 로드할 수 있습니다. CursorLoader 서브클래스는 ContentProvider에서 지원하는 데이터에 이 작업을 할 수 있도록 특별히 설계되었습니다.

새 로더가 요청되거나 데이터가 변경될 때 콜백을 수신하도록 LoaderCallbacks 인터페이스를 구현하고, initLoader()를 호출하여 활동 또는 프래그먼트의 로더를 초기화하기만 하면 됩니다.

자세한 내용은 로더 문서를 참고하세요. LoaderCursor LoaderThrottle 샘플에서 로더를 사용한 코드 예도 확인할 수 있습니다.

블루투스 A2DP 및 헤드셋 API

이제 Android에는 애플리케이션이 연결된 블루투스 A2DP 및 헤드셋 프로필 기기의 상태를 확인할 수 있는 API가 포함되어 있습니다. 예를 들어, 애플리케이션은 음악 듣기를 위해 블루투스 헤드셋이 연결된 경우를 식별하고 적절히 사용자에게 알릴 수 있습니다. 애플리케이션은 공급업체별 AT 명령어에 관한 브로드캐스트를 수신하고 연결된 기기의 상태(예: 연결된 기기의 배터리가 부족할 때)를 사용자에게 알릴 수도 있습니다.

블루투스 클라이언트가 연결되거나 연결 해제될 때 콜백을 수신하도록 A2DP 또는 HEADSET 프로필 상수와 BluetoothProfile.ServiceListenergetProfileProxy()를 호출하여 각 BluetoothProfile를 초기화할 수 있습니다.

애니메이션 프레임워크

새롭고 유연한 애니메이션 프레임워크를 사용하면 모든 객체(View, Drawable, Fragment, Object 등)의 임의 속성에 애니메이션을 적용할 수 있습니다. 이 API를 사용하면 다음과 같은 애니메이션의 여러 측면을 정의할 수 있습니다.

  • 시간
  • 반복 횟수 및 행동
  • 시간 보간 유형
  • 애니메이터는 애니메이션을 함께, 순차적으로 또는 지정된 지연 시간 후에 재생하도록 설정합니다.
  • 프레임 새로고침 지연

기본적으로 객체의 int, float, 16진수 색상 값에 이러한 애니메이션 측면과 그 외의 요소를 정의할 수 있습니다. 즉, 객체에 이러한 유형 중 하나의 속성 필드가 있으면 시간이 지남에 따라 값을 변경하여 애니메이션에 영향을 줄 수 있습니다. 다른 유형의 값에 애니메이션을 적용하려면 TypeEvaluator 인터페이스를 구현하여 해당 유형의 값을 계산하는 방법을 시스템에 알려야 합니다.

속성 값에 애니메이션을 적용하는 데 사용할 수 있는 애니메이터는 ValueAnimatorObjectAnimator 두 가지가 있습니다. ValueAnimator는 애니메이션 값을 계산하지만, 결과적으로 애니메이션되는 특정 객체나 속성은 인식하지 못합니다. 단순히 계산만 수행하며, 업데이트를 수신 대기하고 자체 로직으로 데이터를 처리해야 합니다. ObjectAnimatorValueAnimator의 서브클래스로, 애니메이션을 적용할 객체와 속성을 설정할 수 있게 해 주고 모든 애니메이션 작업을 처리합니다. 즉, 애니메이션을 적용할 객체, 시간 경과에 따라 변경할 객체 속성, 시간 경과에 따라 속성에 적용할 값 집합을 ObjectAnimator에 제공한 후 애니메이션을 시작합니다.

또한 LayoutTransition 클래스는 활동 레이아웃의 변경사항에 자동 전환 애니메이션을 사용 설정합니다. 레이아웃의 일부에 전환을 사용 설정하려면 LayoutTransition 객체를 만들고 setLayoutTransition()를 호출하여 ViewGroup에서 이 객체를 설정합니다. 이렇게 하면 그룹에 항목이 추가되거나 그룹에서 삭제될 때마다 기본 애니메이션이 실행됩니다. 맞춤 애니메이션을 지정하려면 LayoutTransition에서 setAnimator()를 호출하고 위에서 설명한 ValueAnimator 또는 ObjectAnimator과 같은 맞춤 Animator를 제공합니다.

자세한 내용은 속성 애니메이션 문서를 참고하세요. API 데모 애플리케이션에서 애니메이션 API를 사용하여 몇 가지 샘플을 확인할 수도 있습니다.

확장 UI 프레임워크

  • ListView 및 GridView의 다중 선택 선택

    setChoiceMode()의 새 CHOICE_MODE_MULTIPLE_MODAL 모드를 사용하면 사용자가 ListView 또는 GridView에서 여러 항목을 선택할 수 있습니다. 작업 모음과 함께 사용하면 사용자는 여러 항목을 선택한 다음 작업 모음 (다중 선택 작업 모드로 변환됨)의 옵션 목록에서 실행할 작업을 선택할 수 있습니다.

    다중 선택 선택을 사용 설정하려면 setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)를 호출하고 setMultiChoiceModeListener()MultiChoiceModeListener를 등록하세요.

    사용자가 항목을 길게 누르면 작업 모음이 다중 선택 작업 모드로 전환됩니다. 시스템은 onItemCheckedStateChanged()를 호출하여 항목이 선택되면 MultiChoiceModeListener에 알립니다.

    다중 선택 선택의 예는 API 데모 샘플 애플리케이션의 List15. java 클래스를 참고하세요.

  • 뷰 변환을 위한 새로운 API

    새로운 API를 사용하면 활동 레이아웃의 뷰에 2D 및 3D 변환을 쉽게 적용할 수 있습니다. 뷰의 레이아웃 위치, 방향, 투명도 등을 정의하는 객체 속성 집합을 사용하여 새로운 변환을 구현할 수 있습니다.

    뷰 속성을 설정하는 새로운 메서드에는 setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha() 등이 있습니다.

    일부 메서드에는 기본 변환을 적용하기 위해 레이아웃 파일에서 지정할 수 있는 상응하는 XML 속성도 있습니다. 사용 가능한 속성은 translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY, alpha입니다.

    이러한 새 뷰 속성 중 일부를 위에서 설명한 새로운 애니메이션 프레임워크와 함께 사용하면 멋진 애니메이션을 뷰에 쉽게 적용할 수 있습니다. 예를 들어 y축에서 뷰를 회전하려면 ObjectAnimatorView, 'rotationY' 속성, 시작 값과 종료 값을 제공합니다.

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }
    

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
    
  • 새로운 홀로그램 테마

    표준 시스템 위젯과 전반적인 디자인이 새롭게 설계되어 새로운 '홀로그램' 사용자 인터페이스 테마를 통합했습니다. 시스템은 표준 스타일 및 테마 시스템을 사용하여 새 테마를 적용합니다.

    android:minSdkVersion 또는 android:targetSdkVersion 값을 "11"로 설정하여 Android 3.0 플랫폼을 타겟팅하는 모든 애플리케이션은 기본적으로 홀로그램 테마를 상속합니다. 그러나 애플리케이션이 자체 테마도 적용하는 경우 홀로그램 테마를 상속하도록 스타일을 업데이트하지 않는 한 테마가 홀로그램 테마를 재정의합니다.

    홀로그램 테마를 개별 활동에 적용하거나 자체 테마 정의에서 상속하려면 몇 가지 새로운 Theme.Holo 테마 중 하나를 사용합니다. 애플리케이션이 Android 3.0 미만 버전과 호환되고 맞춤 테마를 적용하는 경우 플랫폼 버전에 따라 테마를 선택해야 합니다.

  • 새 위젯
    • AdapterViewAnimator

      뷰 간에 전환할 때 애니메이션을 실행하는 AdapterView의 기본 클래스입니다.

    • AdapterViewFlipper

      추가된 두 개 이상의 뷰 간에 애니메이션을 적용하는 간단한 ViewAnimator입니다. 한 번에 한 어린이만 표시됩니다. 요청될 경우 일정한 간격으로 각 하위 요소 간에 자동으로 전환할 수 있습니다.

    • CalendarView

      사용자가 날짜를 터치하여 캘린더에서 날짜를 선택하고 캘린더를 원하는 날짜로 스크롤하거나 플링할 수 있습니다. 위젯에서 사용 가능한 날짜 범위를 구성할 수 있습니다.

    • ListPopupWindow

      호스트 뷰에 고정하고 EditText 뷰에 입력할 때 추천 목록과 같은 선택 목록을 표시합니다.

    • NumberPicker

      사용자가 사전 정의된 범위에서 숫자를 선택할 수 있도록 사용 설정합니다. 위젯에는 입력 필드와 숫자를 선택할 수 있는 위/아래 버튼이 표시됩니다. 입력란을 터치하면 사용자가 값을 스크롤하거나 다시 터치하여 현재 값을 직접 수정할 수 있습니다. 또한 위치를 문자열에 매핑하여 색인 위치 대신 해당하는 문자열이 표시되도록 할 수 있습니다.

    • PopupMenu

      뷰에 고정된 모달 팝업 창에 Menu를 표시합니다. 팝업은 공간이 있는 경우 앵커 뷰 아래에, 공간이 없는 경우 그 위에 표시됩니다. IME (소프트 키보드)가 표시되면 사용자가 메뉴를 터치할 때까지 팝업은 IME와 겹치지 않습니다.

    • SearchView

      지정된 활동에 검색어를 전달하고 (기존 검색 대화상자와 동일한 방식으로) 추천 검색어를 표시하도록 구성할 수 있는 검색창을 제공합니다. 이 위젯은 작업 모음에서 검색 위젯을 제공하는 데 특히 유용합니다. 자세한 내용은 검색 인터페이스 만들기를 참고하세요.

    • StackView

      하위 요소를 3D 스택에 표시하고 사용자가 rolodex와 같은 뷰를 스와이프할 수 있는 뷰

그래픽

  • 하드웨어 가속 2D 그래픽

    이제 매니페스트 요소의 <application> 요소 또는 개별 <activity> 요소에 android:hardwareAccelerated="true"를 설정하여 애플리케이션에 OpenGL 렌더기를 사용 설정할 수 있습니다.

    이 플래그는 애플리케이션이 더 빠르게 그리게 하여 애플리케이션에 도움을 줍니다. 이를 통해 애니메이션과 스크롤이 더 매끄러워지고, 전반적으로 성능과 사용자 상호작용에 대한 응답이 개선됩니다.

  • 하드웨어 및 소프트웨어 레이어 지원 보기

    기본적으로 View에는 지정된 레이어가 없습니다. setLayerType() 또는 layerType 속성을 사용하여 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 값으로 지정된 하드웨어 또는 소프트웨어 레이어에서 뷰를 지원하도록 지정할 수 있습니다.

    하드웨어 레이어는 하드웨어별 텍스처 (일반적으로 프레임 버퍼 객체 또는 OpenGL 하드웨어의 FBO)로 지원되며 Android의 하드웨어 렌더링 파이프라인을 사용하여 뷰가 렌더링됩니다. 단, 뷰 계층 구조에 하드웨어 가속이 사용 설정된 경우에만 가능합니다. 하드웨어 가속을 사용 중지하면 하드웨어 레이어가 소프트웨어 레이어와 동일하게 작동합니다.

    소프트웨어 레이어는 비트맵으로 지원되며 하드웨어 가속이 사용 설정된 경우에도 Android의 소프트웨어 렌더링 파이프라인을 사용하여 뷰가 렌더링됩니다. 영향을 받는 뷰 트리가 자주 업데이트되는 경우 소프트웨어 레이어를 피해야 합니다. 모든 업데이트 시 소프트웨어 레이어를 다시 렌더링해야 하므로 속도가 느려질 수 있습니다.

    자세한 내용은 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 문서를 참고하세요.

  • Renderscript 3D 그래픽 엔진

    Renderscript는 3D 장면 빌드를 위한 API와 최대 성능을 위한 플랫폼에 독립적인 특수 셰이더 언어를 모두 제공하는 런타임 3D 프레임워크입니다. Renderscript를 사용하면 그래픽 작업 및 데이터 처리 속도를 높일 수 있습니다. Renderscript는 애플리케이션, 배경화면, 캐러셀 등에 사용할 고성능 3D 효과를 만드는 데 이상적인 방법입니다.

    자세한 내용은 Renderscript를 사용한 3D 렌더링 및 계산 문서를 참고하세요.

미디어

  • 타임랩스 동영상

    이제 Camcorder API가 타임랩스 동영상 녹화 기능을 지원합니다. setCaptureRate()는 프레임이 캡처되어야 하는 속도를 설정합니다.

  • 이미지 스트림을 위한 텍스처 지원

    새로운 SurfaceTexture를 사용하면 이미지 스트림을 OpenGL ES 텍스처로 캡처할 수 있습니다. Camera 인스턴스에 setPreviewTexture()를 호출하여 카메라에서 동영상 재생 또는 미리보기 프레임을 그릴 SurfaceTexture를 지정할 수 있습니다.

  • HTTP 실시간 스트리밍

    이제 애플리케이션이 M3U 재생목록 URL을 미디어 프레임워크에 전달하여 HTTP 실시간 스트리밍 세션을 시작할 수 있습니다. 미디어 프레임워크는 적응형 비트 전송률을 포함한 대부분의 HTTP 실시간 스트리밍 사양을 지원합니다. 자세한 내용은 지원되는 미디어 형식 문서를 참고하세요.

  • EXIF 데이터

    ExifInterface에는 사진 조리개, ISO, 노출 시간에 관한 새로운 필드가 포함되어 있습니다.

  • 캠코더 프로필

    새로운 hasProfile() 메서드와 여러 동영상 품질 프로필 (예: QUALITY_1080P, QUALITY_720P, QUALITY_CIF 등)을 사용하여 캠코더 화질 옵션을 결정할 수 있습니다.

  • 디지털 미디어 파일 전송

    이 플랫폼에는 USB를 통한 미디어/사진 전송 프로토콜 (MTP/PTP) 지원이 내장되어 있는데, 이를 통해 사용자는 모든 유형의 미디어 파일을 기기와 호스트 컴퓨터로 쉽게 전송할 수 있습니다. 개발자는 이러한 지원을 바탕으로 기기 간에 전송하거나 공유할 수 있는 리치 미디어 파일을 만들거나 관리할 수 있는 애플리케이션을 만들 수 있습니다.

  • 디지털 권한 관리 (DRM)

    디지털 권리를 확인하고 시행하기 위한 새로운 확장 가능한 디지털 권한 관리 (DRM) 프레임워크 이 아키텍처는 두 가지 아키텍처 레이어로 구현됩니다.

    • DRM 프레임워크 API: 애플리케이션에 노출되고 표준 애플리케이션용 Dalvik VM을 통해 실행됩니다.
    • 프레임워크 API를 구현하고 다양한 DRM 스키마의 권한 관리 및 복호화를 처리하기 위해 DRM 플러그인의 인터페이스를 노출하는 네이티브 코드 DRM 관리자

    애플리케이션 개발자를 위해 프레임워크는 보호된 콘텐츠의 관리를 간소화하는 추상적인 통합 API를 제공합니다. 이 API는 DRM 작업의 복잡성을 숨기고 보호되는 콘텐츠와 보호되지 않는 콘텐츠, 그리고 다양한 DRM 스키마에 걸쳐 일관된 작업 모드를 허용합니다.

    기기 제조업체, 콘텐츠 소유자, 인터넷 디지털 미디어 제공업체의 경우 DRM 프레임워크의 플러그인 API는 콘텐츠 보호를 안전하게 시행하기 위해 Android 시스템에 원하는 DRM 스키마 지원을 추가할 수 있는 방법을 제공합니다.

    미리보기 출시에서는 디지털 권리를 확인하고 시행하기 위한 네이티브 DRM 플러그인을 제공하지 않습니다. 하지만 기기 제조업체는 기기와 함께 DRM 플러그인을 제공할 수 있습니다.

    모든 DRM API는 android.drm 패키지에서 찾을 수 있습니다.

키보드 지원

  • 컨트롤, 메타, Caps Lock, Num Lock, Scroll Lock 수정자가 지원됩니다. 자세한 내용은 META_CTRL_ON 및 관련 필드를 참고하세요.
  • Esc, Home, End, Delete 등의 키 지원을 포함하여 전체 데스크톱 스타일의 키보드를 지원합니다. getKeyboardType()를 쿼리하고 KeyCharacterMap.FULL를 확인하여 키 이벤트가 전체 키보드에서 발생했는지 확인할 수 있습니다.
  • 이제 TextView는 Control+X, Control+C, Control+V, Control+A를 사용하여 키보드 기반의 잘라내기, 복사, 붙여넣기, 모두 선택 기능을 지원합니다. 또한 PageUp/PageDown, Home/End, 키보드 기반 텍스트 선택도 지원합니다.
  • KeyEvent에는 키 수정자 상태를 더 정확하고 일관되게 확인할 수 있는 몇 가지 새로운 메서드가 추가되었습니다. hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers()를 참고하세요.
  • 애플리케이션은 Activity, Dialog 또는 View를 서브클래스로 분류하고 onKeyShortcut()를 구현하여 맞춤 단축키를 구현할 수 있습니다. 프레임워크는 키가 Control 키와 결합될 때마다 이 메서드를 호출합니다. 옵션 메뉴를 만들 때 각 <item> 요소 (또는 setShortcut()를 사용하여)의 android:alphabeticShortcut 또는 android:numericShortcut 속성을 설정하여 단축키를 등록할 수 있습니다.
  • Android 3.0에는 ID가 KeyCharacterMap.VIRTUAL_KEYBOARD인 새로운 '가상 키보드' 기기가 포함됩니다. 가상 키보드에는 데스크톱 스타일의 미국 키 맵이 있으며, 이는 입력 테스트를 위한 키 이벤트를 합성하는 데 유용합니다.

터치 이벤트 분할

이전에는 한 번에 하나의 뷰만 터치 이벤트를 수락할 수 있었습니다. Android 3.0은 여러 뷰와 창 간에 터치 이벤트를 분할할 수 있는 지원 기능을 추가하므로 여러 뷰가 동시 터치 이벤트를 수락할 수 있습니다.

분할 터치 이벤트는 애플리케이션이 Android 3.0을 타겟팅하는 경우 기본적으로 사용 설정됩니다. 즉, 애플리케이션이 android:minSdkVersion 또는 android:targetSdkVersion 속성의 값을 "11"로 설정한 경우입니다.

그러나 다음 속성을 사용하면 특정 뷰 그룹 내부의 뷰와 여러 창 간에 터치 이벤트 분할을 사용 중지할 수 있습니다.

  • 뷰 그룹의 android:splitMotionEvents 속성을 사용하면 레이아웃의 하위 뷰 간에 발생하는 분할 터치 이벤트를 사용 중지할 수 있습니다. 예를 들면 다음과 같습니다.
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    이렇게 하면 선형 레이아웃의 하위 뷰는 터치 이벤트를 분할할 수 없습니다. 한 번에 하나의 뷰만 터치 이벤트를 수신할 수 있습니다.

  • android:windowEnableSplitTouch 스타일 속성을 사용하면 활동 또는 전체 애플리케이션의 테마에 적용하여 여러 창에서 터치 이벤트 분할을 사용 중지할 수 있습니다. 예를 들면 다음과 같습니다.
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    이 테마가 <activity><application>에 적용되면 현재 활동 창 내의 터치 이벤트만 허용됩니다. 예를 들어 여러 창에서 분할 터치 이벤트를 사용 중지하면 시스템 바는 활동과 동시에 터치 이벤트를 수신할 수 없습니다. 이렇게 해도 활동 내부의 뷰가 터치 이벤트를 분할할 수 있는지 여부에는 영향을 미치지 않습니다. 기본적으로 활동은 여전히 뷰 간에 터치 이벤트를 분할할 수 있습니다.

    테마를 만드는 방법에 관한 자세한 내용은 스타일 및 테마 적용을 참고하세요.

WebKit

  • 새로운 WebViewFragment 클래스를 사용하여 WebView로 구성된 프래그먼트를 만듭니다.
  • 새로운 WebSettings 메서드:
    • setDisplayZoomControls()를 사용하면 사용자가 손가락 동작으로 확대/축소하도록 허용하는 동시에 화면 확대/축소 컨트롤을 숨길 수 있습니다 (setBuiltInZoomControls()true로 설정해야 함).
    • 새로운 WebSettings 메서드인 setEnableSmoothTransition()를 사용하면 화면 이동 및 확대/축소 시 원활하게 전환할 수 있습니다. 사용 설정하면 WebView가 성능을 극대화하는 솔루션을 선택합니다 (예: 전환 중에 WebView의 콘텐츠가 업데이트되지 않을 수 있음).
  • 새로운 WebView 메서드:
    • onPause() 콜백: WebView와 연결된 모든 처리가 숨겨질 때 일시중지합니다. 이는 WebView가 포그라운드에 있지 않을 때 불필요한 CPU 또는 네트워크 트래픽을 줄이는 데 유용합니다.
    • onResume() 콜백: onPause() 중에 일시중지된 WebView와 연결된 처리를 재개합니다.
    • saveWebArchive()를 사용하면 현재 뷰를 기기에 웹 보관 파일로 저장할 수 있습니다.
    • showFindDialog()는 현재 뷰에서 텍스트 검색을 시작합니다.

브라우저

브라우저 애플리케이션은 웹 애플리케이션을 지원하기 위해 다음 기능을 추가합니다.

  • 미디어 캡처

    HTML 미디어 캡처 사양에 정의된 대로 브라우저를 사용하면 웹 애플리케이션이 기기의 오디오, 이미지 및 동영상 캡처 기능에 액세스할 수 있습니다. 예를 들어 다음 HTML은 사용자가 업로드할 사진을 캡처하기 위한 입력을 제공합니다.

    <input type="file" accept="image/*;capture=camera" />
    

    또는 capture=camera 매개변수를 제외하면 사용자는 카메라로 새 이미지를 캡처하거나 기기에서 (예: 갤러리 애플리케이션)에서 이미지를 선택할 수 있습니다.

  • 기기 방향

    기기 방향 이벤트 사양에 정의된 대로 브라우저를 사용하면 브라우저를 통해 웹 애플리케이션이 기기의 물리적 방향 및 모션에 관한 정보를 제공하는 DOM 이벤트를 수신할 수 있습니다.

    기기 방향은 x, y, z축으로 도 단위로 표현되며 모션은 가속 및 회전 속도 데이터로 표현됩니다. 웹페이지는 이벤트 유형이 "deviceorientation"window.addEventListener를 호출하여 방향 이벤트를 등록하고 "devicemotion" 이벤트 유형을 등록하여 모션 이벤트에 등록할 수 있습니다.

  • CSS 3D 변환

    CSS 3D 변환 모듈 사양에 정의된 대로 브라우저를 사용하면 CSS에서 렌더링된 요소를 3차원으로 변환할 수 있습니다.

JSON 유틸리티

새로운 클래스인 JsonReaderJsonWriter를 사용하면 JSON 스트림을 읽고 쓸 수 있습니다. 새 API는 메모리의 문서를 조작하는 org.json 클래스를 보완합니다.

생성자 메서드를 호출하고 JSON 문자열을 제공하는 InputStreamReader를 전달하여 JsonReader의 인스턴스를 만들 수 있습니다. 그런 다음 beginObject()를 호출하여 객체 읽기를 시작하고 nextName()로 키 이름을 읽고 nextString()nextInt()과 같은 각 유형의 메서드를 사용하여 값을 읽고 hasNext()가 true인 동안 계속 읽습니다.

생성자를 호출하고 적절한 OutputStreamWriter를 전달하여 JsonWriter의 인스턴스를 만들 수 있습니다. 그런 다음 name()를 사용하여 속성 이름을 추가하고 적절한 value() 메서드를 사용하여 각 값을 추가하여 리더와 유사한 방식으로 JSON 데이터를 작성합니다.

이러한 클래스는 기본적으로 엄격합니다. 각 클래스의 setLenient() 메서드는 클래스가 더 자유롭게 수락하도록 구성합니다. 이 관대한 파싱 모드는 org.json의 기본 파서와도 호환됩니다.

새 기능 상수

<uses-feature> 맨페스트 요소는 애플리케이션이 사용하는 하드웨어 및 소프트웨어 기능 집합을 외부 항목 (예: Google Play)에 알리는 데 사용해야 합니다. 이번 출시에서 Android에는 애플리케이션이 이 요소를 사용하여 선언할 수 있는 다음과 같은 새로운 상수가 추가되었습니다.

  • "android.hardware.faketouch"

    선언된 경우 애플리케이션이 에뮬레이션된 터치스크린 (또는 그 이상)을 제공하는 기기와 호환됨을 나타냅니다. 에뮬레이션된 터치스크린을 제공하는 기기는 터치스크린 기능 하위 집합을 에뮬레이션할 수 있는 사용자 입력 시스템을 제공합니다. 이러한 입력 시스템의 예로는 화면 커서를 구동하는 마우스 또는 리모컨이 있습니다. 이러한 입력 시스템은 클릭 아래로, 클릭 위로, 드래그와 같은 기본적인 터치 이벤트를 지원합니다. 그러나 더 복잡한 입력 유형 (예: 동작, 플링 등)은 모조 터치 기기에서는 더 어렵거나 불가능할 수 있습니다 (멀티 터치 동작은 불가능함).

    애플리케이션에 복잡한 동작이 필요하지 않고 에뮬레이션된 터치스크린이 있는 기기에서 애플리케이션을 필터링하지 않으려는 경우에는 <uses-feature> 요소를 사용하여 "android.hardware.faketouch"를 선언해야 합니다. 이렇게 하면 에뮬레이션된 터치스크린 입력만 제공하는 기기를 포함하여 최대한 많은 기기 유형에서 애플리케이션을 사용할 수 있습니다.

    터치스크린 기능이 모조터치 기능의 상위 집합이므로 터치스크린이 포함된 모든 기기도 "android.hardware.faketouch"를 지원합니다. 따라서 실제로 터치스크린이 필요하지 않다면 모조 터치를 위한 <uses-feature> 요소를 추가해야 합니다.

새로운 권한

  • "android.permission.BIND_REMOTEVIEWS"

    이는 RemoteViewsService 구현을 위한 <service> 매니페스트 요소에서 필수 권한으로 선언해야 합니다. 예를 들어 RemoteViewsService를 사용하여 컬렉션 뷰를 채우는 앱 위젯을 만들 때 매니페스트 항목은 다음과 같을 수 있습니다.

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />
    

새로운 플랫폼 기술

  • 스토리지
    • 온보드 eMMC 저장소를 사용하기 위한 ext4 파일 시스템 지원
    • MTP 기기를 지원하는 FUSE 파일 시스템
    • 키보드 및 USB 허브를 지원하는 USB 호스트 모드 지원
    • MTP/PTP 지원
  • Linux 커널
    • 2.6.36으로 업그레이드됨
  • Dalvik VM
    • SMP를 지원하고 최적화하는 새로운 코드
    • JIT 인프라의 다양한 개선사항
    • 가비지 컬렉터 개선사항:
      • SMP에 맞게 조정됨
      • 더 큰 힙 크기 지원
      • 비트맵 및 바이트 버퍼의 통합 처리
  • Dalvik Core 라이브러리
    • 새롭고 훨씬 빠른 NIO (최신 I/O 라이브러리) 구현
    • 예외 메시지 개선
    • 전체의 정확성 및 성능 수정

API 차이점 보고서

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

API 수준

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

Android 3.0에 도입된 API를 애플리케이션에서 사용하려면 Android 3.0 SDK 플랫폼에서 제공되는 Android 라이브러리를 대상으로 애플리케이션을 컴파일해야 합니다. 필요에 따라 애플리케이션의 매니페스트에 있는 <uses-sdk> 요소에 android:minSdkVersion="11" 속성을 추가해야 할 수도 있습니다. 애플리케이션이 Android 2.3 이상에서만 실행되도록 설계된 경우 이 속성을 선언하면 애플리케이션이 이전 버전의 플랫폼에 설치되지 않습니다.

자세한 내용은 API 수준이란 무엇인가요?를 읽어보세요.