Android 3.1 API

API 수준: 12

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

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

API 개요

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

USB API

Android 3.1에는 연결된 주변기기를 플랫폼에서 실행되는 애플리케이션과 통합하기 위한 강력한 새 API가 도입되었습니다. API는 USB 호스트 및 기기 상호작용 지원을 포함하여 플랫폼에 내장된 USB (범용 직렬 버스) 스택 및 서비스를 기반으로 합니다. 개발자는 이 API를 사용하여 USB를 통해 연결된 다양한 기기 유형을 탐색, 통신 및 관리할 수 있는 애플리케이션을 만들 수 있습니다.

스택 및 API는 Android 지원 기기가 호스트 역할을 하는지 외부 하드웨어가 호스트 역할을 하는지에 따라 두 가지 기본 유형의 USB 하드웨어를 구분합니다.

  • USB 기기는 Android 지원 기기에 호스트 역할을 하는 연결된 하드웨어입니다. 예를 들어 대부분의 입력 장치, 마우스 및 조이스틱과 많은 카메라, 허브 등이 USB 기기입니다.
  • USB 액세서리는 USB 호스트 컨트롤러가 있고 전력을 공급하며 USB를 통해 Android 지원 기기와 통신하도록 설계된 연결된 하드웨어입니다. 로봇 컨트롤러에서 음악 장비, 운동용 자전거 등에 이르기까지 다양한 주변기기를 액세서리로 연결할 수 있습니다.

USB 기기 및 USB 액세서리의 두 가지 유형 모두 플랫폼의 USB API는 연결되거나 분리될 때 인텐트 브로드캐스트로 검색할 수 있을 뿐만 아니라 표준 인터페이스, 엔드포인트, 전송 모드(제어, 일괄 및 인터럽트)도 지원합니다.

USB API는 android.hardware.usb 패키지에서 사용할 수 있습니다. 중심 클래스는 UsbManager로, USB 기기와 USB 액세서리를 모두 식별하고 통신하기 위한 도우미 메서드를 제공합니다. 애플리케이션은 UsbManager의 인스턴스를 획득한 다음 연결된 기기나 액세서리의 목록을 쿼리하고 이러한 기기와 통신하거나 관리할 수 있습니다. UsbManager는 USB 기기 또는 액세서리가 연결되거나 분리되었을 때 알리기 위해 시스템에서 브로드캐스트하는 인텐트 작업도 선언합니다.

기타 클래스는 다음과 같습니다.

  • UsbDevice: USB 기기로 연결된 외부 하드웨어를 나타내는 클래스 (호스트 역할을 하는 Android 지원 기기)
  • UsbAccessory: USB 호스트로 연결된 외부 하드웨어를 나타냅니다 (Android 지원 기기는 USB 기기 역할을 함).
  • UsbInterfaceUsbEndpoint: 기기의 표준 USB 인터페이스 및 엔드포인트에 대한 액세스를 제공합니다.
  • UsbDeviceConnection, UsbRequest: USB 기기와의 데이터 및 제어 메시지 전송 및 수신(동기식과 비동기식으로)
  • UsbConstants: 엔드포인트 유형, 기기 클래스 등을 선언하기 위한 상수를 제공합니다.

USB 스택이 플랫폼에 내장되어 있지만 특정 기기의 USB 호스트 및 공개 액세서리 모드에 관한 실제 지원은 제조업체에서 결정합니다. 특히 호스트 모드는 Android 지원 기기의 적절한 USB 컨트롤러 하드웨어에 의존합니다.

또한 개발자는 Google Play에서 필터링을 요청하여 적절한 USB 지원을 제공하지 않는 기기의 사용자에게 애플리케이션이 제공되지 않도록 할 수 있습니다. 필터링을 요청하려면 적절하게 아래 요소 중 하나 또는 둘 모두를 애플리케이션 매니페스트에 추가하세요.

  • 애플리케이션이 USB 호스트 모드 (USB 기기 연결)를 지원하는 기기에만 표시되어야 하는 경우 다음 요소를 선언합니다.

    <uses-feature android:name="android.hardware.usb.host" android:required="true">

  • 애플리케이션이 USB 액세서리 (USB 호스트 연결)를 지원하는 기기에만 표시되어야 하는 경우 다음 요소를 선언합니다.

    <uses-feature android:name="android.hardware.usb.accessory" android:required="true">

USB 액세서리와 상호작용하는 애플리케이션을 개발하는 방법에 관해 자세히 알아보려면 개발자 문서를 참고하세요.

USB 호스트 API를 사용하는 샘플 애플리케이션을 살펴보려면 ADB 테스트미사일 런처를 참고하세요.

MTP/PTP API

Android 3.1은 애플리케이션이 연결된 카메라 및 기타 PTP 기기와 직접 상호작용할 수 있는 새로운 MTP API를 노출합니다. 새로운 API를 사용하면 애플리케이션이 기기 연결 및 삭제 시 알림을 쉽게 수신하고, 기기의 파일과 저장소를 관리하며, 기기와 메타데이터를 주고받을 수 있습니다. MTP API는 MTP (미디어 전송 프로토콜) 사양의 PTP (사진 전송 프로토콜) 하위 집합을 구현합니다.

MTP API는 android.mtp 패키지에서 사용할 수 있으며 다음과 같은 클래스를 제공합니다.

  • MtpDevice는 USB 호스트 버스를 통해 연결된 MTP 기기를 캡슐화합니다. 애플리케이션은 이 유형의 객체를 인스턴스화한 다음 그 메서드를 사용하여 기기와 기기에 저장된 객체에 관한 정보를 가져오고, 연결을 열고 데이터를 전송할 수 있습니다. 몇 가지 방법은 다음과 같습니다.
    • getObjectHandles()는 지정된 형식 및 상위 요소와 일치하는 기기의 모든 객체의 핸들 목록을 반환합니다. 애플리케이션은 객체에 관한 정보를 가져오기 위해 핸들을 getObjectInfo()에 전달할 수 있습니다.
    • importFile()를 사용하면 애플리케이션이 객체의 데이터를 외부 저장소의 파일로 복사할 수 있습니다. 이 호출은 데이터 크기와 기기 속도에 따라 임의의 시간 동안 차단될 수 있으므로 spearate 스레드에서 실행해야 합니다.
    • open()를 사용하면 애플리케이션이 연결된 MTP/PTP 기기를 열 수 있습니다.
    • getThumbnail()는 객체의 썸네일을 바이트 배열로 반환합니다.
  • MtpStorageInfo는 MTP 사양의 섹션 5.2.2에 설명된 StorageInfo 데이터 세트에 상응하는 MTP 기기의 저장소 단위에 관한 정보를 보유합니다. 클래스의 메서드를 사용하면 애플리케이션이 저장 단위의 설명 문자열, 여유 공간, 최대 저장 용량, 스토리지 ID, 볼륨 식별자를 가져올 수 있습니다.
  • MtpDeviceInfo는 MTP 사양의 섹션 5.1.1에 설명된 DeviceInfo 데이터 세트에 상응하는 MTP 기기에 관한 정보를 보유합니다. 클래스의 메서드를 사용하면 애플리케이션이 기기의 제조업체, 모델, 일련번호, 버전을 가져올 수 있습니다.
  • MtpObjectInfo는 MTP 사양의 섹션 5.3.1에 설명된 ObjectInfo 데이터 세트에 상응하는 MTP 기기에 저장된 객체에 대한 정보를 보유합니다. 이 클래스의 메서드를 사용하면 애플리케이션이 객체의 크기, 데이터 형식, 연결 유형, 생성 날짜, 썸네일 정보를 가져올 수 있습니다.
  • MtpConstants는 MTP 파일 형식 코드, 연결 유형 및 보호 상태를 선언하는 상수를 제공합니다.

새로운 입력 장치 및 모션 이벤트 지원

Android 3.1은 입력 하위 시스템을 확장하여 모든 뷰와 창에서 새로운 입력 기기와 새로운 유형의 모션 이벤트를 지원합니다. 개발자는 이러한 기능을 기반으로 사용자가 키보드와 터치스크린 외에도 마우스, 트랙볼, 조이스틱, 게임패드 및 기타 기기를 사용하여 애플리케이션과 상호작용할 수 있도록 합니다.

마우스, 스크롤휠, 트랙볼 입력을 처리하기 위해 플랫폼에서는 두 가지 새로운 모션 이벤트 작업을 지원합니다.

  • ACTION_SCROLL: 터치 이외의 스크롤 모션(예: 마우스 스크롤 휠)이 이루어진 포인터 위치를 설명합니다. MotionEvent에서 AXIS_HSCROLLAXIS_VSCROLL 축의 값은 상대적 스크롤 이동을 지정합니다.
  • ACTION_HOVER_MOVE: 버튼을 누르지 않았을 때 마우스의 현재 위치와 마지막 HOVER_MOVE 이벤트 이후의 중간 지점을 보고합니다. 마우스 오버 시작 및 종료 알림은 아직 지원되지 않습니다.

조이스틱과 게임패드를 지원하기 위해 InputDevice 클래스에는 다음과 같은 새로운 입력 기기 소스가 포함됩니다.

이러한 새로운 소스와 마우스 및 트랙볼의 모션 이벤트를 설명하기 위해 플랫폼은 이제 KeyEvent의 키 코드를 정의하는 방법과 유사하게 MotionEvent의 축 코드를 정의합니다. 조이스틱 및 게임 컨트롤러의 새로운 축 코드에는 AXIS_HAT_X, AXIS_HAT_Y, AXIS_RTRIGGER, AXIS_ORIENTATION, AXIS_THROTTLE 등이 포함됩니다. 기존 MotionEvent 축은 AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR, AXIS_ORIENTATION로 표시됩니다.

또한 MotionEvent는 프레임워크가 특정 축을 매핑하는 방법을 모를 때 사용되는 여러 일반 축 코드를 정의합니다. 특정 기기에서 일반 축 코드를 사용하여 맞춤 모션 데이터를 애플리케이션에 전달할 수 있습니다. 축의 전체 목록과 의도된 해석은 MotionEvent 클래스 문서를 참고하세요.

플랫폼은 모션 이벤트를 애플리케이션에 일괄적으로 제공하므로 단일 이벤트에 현재 위치와 여러 개의 과거 움직임을 포함할 수 있습니다. 애플리케이션은 getHistorySize()를 사용하여 이전 샘플 수를 가져온 후 getHistoricalAxisValue()를 사용하여 모든 이전 샘플을 순서대로 검색하고 처리해야 합니다. 그런 다음 애플리케이션은 getAxisValue()를 사용하여 현재 샘플을 처리해야 합니다.

일부 축은 특수 접근자 메서드를 사용하여 가져올 수 있습니다. 예를 들어 애플리케이션은 getAxisValue()를 호출하는 대신 getX()를 호출할 수 있습니다. 접근자가 내장된 축에는 AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR, AXIS_ORIENTATION가 있습니다.

각 입력 기기에는 고유한 시스템에서 할당한 ID가 있으며 여러 소스를 제공할 수도 있습니다. 기기가 여러 소스를 제공하는 경우 둘 이상의 소스가 같은 축을 사용하여 축 데이터를 제공할 수 있습니다. 예를 들어 터치 소스에서 발생하는 터치 이벤트는 화면 위치 데이터에 X축을 사용하는 반면, 조이스틱 소스에서 발생하는 조이스틱 이벤트는 스틱 위치의 X축을 대신 사용합니다. 따라서 애플리케이션이 축 값이 시작되는 소스에 따라 축 값을 해석하는 것이 중요합니다. 모션 이벤트를 처리할 때 애플리케이션은 InputDevice 클래스의 메서드를 사용하여 기기나 소스에서 지원하는 축을 확인해야 합니다. 특히 애플리케이션은 getMotionRanges()를 사용하여 기기의 모든 축 또는 지정된 기기 소스의 모든 축을 쿼리할 수 있습니다. 두 경우 모두 InputDevice.MotionRange 객체에 반환된 축의 범위 정보는 각 축 값의 소스를 지정합니다.

마지막으로, 조이스틱, 게임패드, 마우스, 트랙볼의 모션 이벤트는 터치 이벤트가 아니므로 플랫폼은 이를 '일반' 모션 이벤트로 View에 전달하는 새 콜백 메서드를 추가합니다. 특히 터치 미지원 모션 이벤트를 onTouchEvent()가 아닌 onGenericMotionEvent() 호출을 통해 View에 보고합니다.

플랫폼은 이벤트 소스 클래스에 따라 일반 모션 이벤트를 다르게 전달합니다. SOURCE_CLASS_POINTER 이벤트는 터치 이벤트 작동 방식과 유사하게 포인터 아래의 View로 이동합니다. 나머지는 모두 현재 포커스가 맞춰진 View로 이동합니다. 예를 들어 View가 조이스틱 이벤트를 수신하려면 포커스를 받아야 합니다. 필요한 경우 애플리케이션은 활동 또는 대화상자 수준에서 onGenericMotionEvent()를 대신 구현하여 이러한 이벤트를 활동 또는 대화상자 수준에서 처리할 수 있습니다.

조이스틱 모션 이벤트를 사용하는 샘플 애플리케이션을 살펴보려면 GameControllerInputGameView를 참고하세요.

RTP API

Android 3.1은 애플리케이션이 주문형 또는 대화형 데이터 스트리밍을 관리하는 데 사용할 수 있는 내장 RTP (실시간 전송 프로토콜) 스택에 API를 노출합니다. 특히 VOIP, 눌러서 말하기, 회의 및 오디오 스트리밍을 제공하는 앱은 API를 사용하여 세션을 시작하고 사용 가능한 모든 네트워크를 통해 데이터 스트림을 송수신할 수 있습니다.

RTP API는 android.net.rtp 패키지에서 사용할 수 있습니다. 클래스에는 다음이 포함됩니다.

  • RtpStream는 RTP를 통해 미디어 페이로드가 포함된 네트워크 패킷을 보내고 받는 스트림의 기본 클래스입니다.
  • AudioStream: RTP를 통해 오디오 페이로드를 전달하는 RtpStream의 서브클래스입니다.
  • AudioGroup: 기기의 스피커, 마이크 및 AudioStream를 관리하고 믹싱하기 위한 로컬 오디오 허브
  • AudioCodec: AudioStream용으로 정의한 코덱 모음을 보유합니다.

오디오 회의 및 유사한 사용을 지원하기 위해 애플리케이션은 두 클래스를 스트림의 엔드포인트로 인스턴스화합니다.

  • AudioStream는 원격 엔드포인트를 지정하며 네트워크 매핑과 구성된 AudioCodec로 구성됩니다.
  • AudioGroup은 하나 이상의 AudioStream에 대한 로컬 엔드포인트를 나타냅니다. AudioGroup는 모든 AudioStream를 믹스하고 선택적으로 기기 스피커 및 마이크와 동시에 상호작용합니다.

가장 간단한 사용법은 단일 원격 엔드포인트와 로컬 엔드포인트입니다. 더 복잡한 사용법은 AudioGroup에 설명된 제한사항을 참고하세요.

RTP API를 사용하려면 애플리케이션은 매니페스트 파일에서 <uses-permission android:name="android.permission.INTERNET">를 선언하여 사용자에게 권한을 요청해야 합니다. 기기 마이크를 획득하려면 <uses-permission android:name="android.permission.RECORD_AUDIO"> 권한도 필요합니다.

크기 조정 가능한 앱 위젯

Android 3.1부터 개발자는 홈 화면 위젯의 크기를 가로, 세로 또는 양쪽 축의 크기 조절이 가능하도록 만들 수 있습니다. 사용자는 위젯을 길게 터치하여 크기 조절 핸들을 표시한 다음 가로 또는 세로 핸들을 드래그하여 레이아웃 그리드의 크기를 변경합니다.

개발자는 위젯의 AppWidgetProviderInfo 메타데이터에서 resizeMode 속성을 정의하여 홈 화면 위젯의 크기를 조절할 수 있도록 할 수 있습니다. resizeMode 속성 값에는 'horizontal', 'vertical', 'none'이 포함됩니다. 위젯의 크기를 가로 및 세로로 조절할 수 있다고 선언하려면 'horizontal|vertical' 값을 제공합니다.

다음 예를 참조하세요.

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical" >
</appwidget-provider>

홈 화면 위젯에 관한 자세한 내용은 앱 위젯 문서를 참고하세요.

애니메이션 프레임워크

  • 새 ViewPropertyAnimator 클래스
    • 새로운 ViewPropertyAnimator 클래스는 개발자가 View 객체의 일부 속성에 애니메이션을 적용하는 편리한 방법을 제공합니다. 이 클래스는 속성의 애니메이션을 자동화 및 최적화하고 View 객체에서 여러 개의 동시 애니메이션을 더 쉽게 관리할 수 있도록 합니다.

      ViewPropertyAnimator 사용은 간단합니다. View의 속성에 애니메이션을 적용하려면 animate()를 호출하여 ViewViewPropertyAnimator 객체를 구성합니다. ViewPropertyAnimator의 메서드를 사용하여 애니메이션화할 속성과 애니메이션 방법을 지정합니다. 예를 들어 View를 투명으로 페이드 아웃하려면 alpha(0);를 호출합니다. ViewPropertyAnimator 객체는 기본 Animator 클래스를 구성하고 시작한 다음 애니메이션을 렌더링하는 방법을 자세히 처리합니다.

  • 애니메이션 배경 색상
    • 새로운 getBackgroundColor()setBackgroundColor(int) 메서드를 사용하면 창 애니메이션에 한해 애니메이션 뒤에 배경 색상을 가져오고 설정할 수 있습니다. 현재 배경은 원하는 알파 수준을 포함하는 검은색이어야 합니다.
  • ViewAnimator에서 애니메이션된 분수 가져오기
    • getAnimatedFraction() 메서드를 사용하면 ValueAnimator에서 현재 애니메이션 비율(가장 최근 프레임 업데이트에 사용된 경과/보간된 비율)을 가져올 수 있습니다.

UI 프레임워크

  • 레이어의 강제 렌더링
    • 새로운 buildLayer() 메서드를 사용하면 애플리케이션이 View 레이어를 생성하고 이 레이어에 즉시 렌더링된 뷰를 강제로 생성할 수 있습니다. 예를 들어 애플리케이션에서 이 메서드를 사용하여 애니메이션을 시작하기 전에 뷰를 레이어에 렌더링할 수 있습니다. 뷰가 복잡한 경우 애니메이션을 시작하기 전에 레이어로 렌더링하면 프레임을 건너뛰지 않습니다.
  • 카메라 거리
    • 애플리케이션은 새로운 메서드 setCameraDistance(float)를 사용하여 카메라에서 뷰까지의 거리를 설정할 수 있습니다. 이를 통해 애플리케이션은 회전과 같은 뷰의 3D 변환에 관한 향상된 제어를 제공합니다.
  • DatePicker에서 캘린더 뷰 가져오기
  • 뷰가 분리될 때 콜백 받기
  • 프래그먼트 탐색경로 리스너, 새 onInflate() 서명
  • 새 탭에 검색결과 표시
    • ACTION_WEB_SEARCH 인텐트의 EXTRA_NEW_SEARCH 데이터 키를 사용하면 기존 브라우저 탭이 아닌 새 브라우저 탭에서 검색을 열 수 있습니다.
  • 드로어블 텍스트 커서
    • 이제 새 리소스 속성 textCursorDrawable를 사용하여 텍스트 커서로 사용할 드로어블을 지정할 수 있습니다.
  • 원격 뷰에 표시되는 하위 요소 설정
  • 게임패드 및 기타 입력 기기의 일반 키
    • KeyEvent는 게임패드 버튼을 수용하도록 다양한 일반 키 코드를 추가합니다. 또한 이 클래스는 키 코드 작업을 위한 isGamepadButton(int) 및 기타 여러 도우미 메서드도 추가합니다.

그래픽

  • 비트맵 관리 도우미
    • setHasAlpha(boolean)를 사용하면 앱에서 비트맵의 모든 픽셀이 불투명한 것으로 알려져 있거나 (false) 일부 픽셀이 불투명하지 않은 알파 값을 포함할 수 있다고 (true) 나타낼 수 있습니다. 일부 구성 (예: RGB_565)에서는 이 호출이 픽셀당 알파 값을 지원하지 않으므로 무시됩니다. 이는 그리기 힌트를 의미합니다. 불투명한 것으로 알려진 비트맵이 픽셀당 불투명하지 않은 알파 값을 포함할 수 있는 비트맵보다 더 빠른 그리기 사례를 사용할 수 있기 때문입니다.
    • getByteCount()는 비트맵의 크기를 바이트 단위로 가져옵니다.
    • getGenerationId()를 사용하면 애플리케이션에서 캐싱 등의 이유로 비트맵이 수정되었는지 확인할 수 있습니다.
    • sameAs(android.graphics.Bitmap)는 지정된 비트맵이 크기, 구성 또는 픽셀 데이터에서 현재 비트맵과 다른지 확인합니다.
  • 카메라 위치 및 회전 설정

네트워크

  • 고성능 Wi-Fi 잠금
    • 새로운 고성능 Wi-Fi 잠금을 사용하면 애플리케이션이 기기 화면이 꺼져 있어도 고성능 Wi-Fi 연결을 유지할 수 있습니다. 음악, 동영상, 음성을 장시간 스트리밍하는 애플리케이션은 고성능 Wi-Fi 잠금을 획득하여 화면이 꺼져 있을 때도 스트리밍 성능을 보장할 수 있습니다. 이 잠금은 전력을 더 많이 사용하기 때문에 오래 지속되는 활성 연결이 필요할 때 고성능 Wi-Fi를 획득해야 합니다.

      고성능 잠금을 만들려면 createWifiLock() 호출에서 WIFI_MODE_FULL_HIGH_PERF를 잠금 모드로 전달합니다.

  • 트래픽 통계 더보기
    • 이제 애플리케이션은 TrafficStats의 새로운 메서드를 사용하여 더 많은 유형의 네트워크 사용에 관한 통계에 액세스할 수 있습니다. 애플리케이션은 이 메서드를 사용하여 지정된 UID의 UDP 통계, 패킷 수, TCP 전송/수신 페이로드 바이트 및 세그먼트를 가져올 수 있습니다.
  • SIP 인증 사용자 이름
    • 이제 애플리케이션에서 새로운 메서드인 getAuthUserName()setAuthUserName()를 사용하여 프로필의 SIP 인증 사용자 이름을 가져오고 설정할 수 있습니다.

다운로드 관리자

  • 완료된 다운로드 처리
    • 이제 애플리케이션에서 완료 시에만 사용자에게 알리는 다운로드를 시작할 수 있습니다. 이러한 유형의 다운로드를 시작하려면 애플리케이션이 요청 객체의 setNotificationVisibility() 메서드에서 VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION를 전달합니다.
    • 새로운 메서드 addCompletedDownload()를 사용하면 애플리케이션이 다운로드 데이터베이스에 파일을 추가하여 다운로드 애플리케이션에서 관리할 수 있습니다.
  • 크기별로 정렬된 다운로드 항목 표시

IME 프레임워크

  • 입력 방법의 추가 값 키 가져오기

미디어

  • 새로운 스트리밍 오디오 형식
    • 미디어 프레임워크는 스트리밍 오디오 개선을 위해 원시 ADTS AAC 콘텐츠를 기본으로 지원하며, 고품질(무손실) 압축 오디오 콘텐츠를 위해 FLAC 오디오를 지원합니다. 자세한 내용은 지원되는 미디어 형식 문서를 참조하세요.

중지된 애플리케이션의 실행 제어

Android 3.1부터는 시스템의 패키지 관리자가 중지된 상태에 있는 애플리케이션을 추적하고 백그라운드 프로세스 및 다른 애플리케이션에서 애플리케이션 실행을 제어하는 수단을 제공합니다.

애플리케이션의 중지 상태는 활동의 중지 상태와 같지 않습니다. 시스템은 이러한 두 개의 중지 상태를 개별적으로 관리합니다.

플랫폼은 발신자가 중지된 애플리케이션에서 구성요소를 활성화하도록 허용해야 하는지를 지정할 수 있는 두 가지 새로운 인텐트 플래그를 정의합니다.

인텐트에 이러한 플래그 모두 또는 둘 다 정의되어 있지 않으면 기본 동작은 중지된 애플리케이션의 필터를 잠재적 타겟 목록에 포함하는 것입니다.

시스템은 FLAG_EXCLUDE_STOPPED_PACKAGES모든 브로드캐스트 인텐트에 추가합니다. 이렇게 하면 백그라운드 서비스의 브로드캐스트가 중지된 애플리케이션의 구성요소를 실수로 또는 불필요하게 시작하는 것을 방지합니다. 백그라운드 서비스나 애플리케이션은 중지된 애플리케이션을 활성화하도록 허용해야 하는 인텐트를 브로드캐스트하기 위해 FLAG_INCLUDE_STOPPED_PACKAGES 플래그를 추가하여 이 동작을 재정의할 수 있습니다.

애플리케이션은 처음 설치될 때 중지 상태이지만 아직 시작되지 않았거나 사용자가 애플리케이션을 수동으로 중지하면 (애플리케이션 관리에서) 중지된 상태입니다.

애플리케이션 최초 실행 및 업그레이드 알림

이 플랫폼은 두 가지 새로운 인텐트 작업을 통해 애플리케이션 최초 실행과 업그레이드에 관한 개선된 알림을 추가합니다.

  • ACTION_PACKAGE_FIRST_LAUNCH - 애플리케이션이 처음 실행될 때(즉, 처음으로 중지 상태에서 벗어날 때) 애플리케이션의 설치 프로그램 패키지로 전송됩니다. 데이터에는 패키지 이름이 포함됩니다.
  • ACTION_MY_PACKAGE_REPLACED - 기존 버전 위에 새 버전이 설치되었음을 애플리케이션에 업데이트했음을 알립니다. 교체된 애플리케이션으로만 전송됩니다. 추가 데이터는 포함되지 않습니다. 이를 수신하려면 이 작업의 인텐트 필터를 선언합니다. 이 인텐트를 사용하여 업그레이드 후 애플리케이션을 올바르게 실행되는 상태로 되돌리는 데 도움이 되는 코드를 트리거할 수 있습니다.

    이 인텐트는 애플리케이션으로 직접 전송되지만, 애플리케이션이 중지된 상태가 아닌 시작 상태일 때 애플리케이션이 업그레이드된 경우에만 전송됩니다.

핵심 유틸리티

  • LRU 캐시
    • 새로운 LruCache 클래스를 사용하면 애플리케이션에서 효율적인 캐싱의 이점을 누릴 수 있습니다. 애플리케이션은 이 클래스를 사용하여 네트워크에서 데이터를 계산하거나 다운로드하는 데 소요되는 시간을 줄이는 동시에 캐시된 데이터에 적합한 메모리 공간을 유지할 수 있습니다.LruCache는 제한된 수의 값에 대한 강력한 참조를 보유하는 캐시입니다. 값에 액세스할 때마다 큐의 헤드로 이동합니다. 전체 캐시에 값이 추가되면 해당 큐의 끝에 있는 값이 제거되며 가비지 컬렉션 대상이 될 수 있습니다.
  • 파일 설명자: int

WebKit

  • 파일 스키마 쿠키
    • 이제 CookieManagerfile: URI 스키마를 사용하는 쿠키를 지원합니다. WebView 또는 CookieManager 인스턴스를 구성하기 전에 setAcceptFileSchemeCookies()를 사용하여 파일 스키마 쿠키 지원을 사용 설정/사용 중지할 수 있습니다. CookieManager 인스턴스에서 allowFileSchemeCookies()를 호출하여 파일 스키마 쿠키가 사용 설정되었는지 확인할 수 있습니다.
  • 로그인 요청 알림
    • Android 3.0에 도입된 브라우저 자동 로그인 기능을 지원하기 위해 새로운 onReceivedLoginRequest() 메서드는 사용자의 자동 로그인 요청이 처리되었음을 호스트 애플리케이션에 알립니다.
  • 클래스 및 인터페이스를 삭제했습니다.
    • 여러 클래스와 인터페이스가 이전에 지원 중단된 상태가 된 후 공개 API에서 삭제되었습니다. 자세한 내용은 API 차이점 보고서를 참고하세요.

브라우저

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

  • HTML5 <video> 태그에 삽입된 동영상의 인라인 재생을 지원합니다. 가능한 경우 재생에 하드웨어 가속이 사용됩니다.
  • 모든 사이트 (모바일 및 데스크톱)의 고정 위치 요소를 레이어로 지원합니다.

새 기능 상수

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

  • android.hardware.usb.accessory - 애플리케이션이 USB API를 사용하여 USB를 통해 연결된 외부 하드웨어 기기와 통신하고 호스트로 작동합니다.
  • android.hardware.usb.host - 애플리케이션이 USB API를 사용하여 USB를 통해 연결된 외부 하드웨어 기기와 통신하고 기기 역할을 합니다.

Google Play는 <uses-feature> 매니페스트 요소에 선언된 기능을 기반으로 애플리케이션을 필터링합니다. 애플리케이션 매니페스트에서 기능을 선언하는 방법에 관한 자세한 내용은 Google Play 필터를 참고하세요.

API 차이점 보고서

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

API 수준

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

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

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