API 수준: 14
Android 4.0 (ICE_CREAM_SANDWICH
)
은(는) 사용자와 앱을 위한 다양한 새 기능을 추가한 주요 플랫폼 릴리스입니다.
있습니다. 아래에서 설명하는 모든 새로운 기능과 API 외에 Android 4.0은
Android 3.x의 광범위한 API 및 홀로그래픽 테마 세트를 제공하기 때문에
더 작은 화면으로 전환할 수 있습니다. 앱 개발자로서 이제 단일 플랫폼과 통합 API 프레임워크를 사용할 수 있습니다.
를 사용하면 단일 APK로 애플리케이션을 개발하고 게시할 수 있으며,
핸드셋, 태블릿 등에 최적화된 사용자 환경을 제공하도록 설계되었습니다.
Android: Android 4.0 (API 수준 14) 이상
개발자에게는 Android 4.0 플랫폼을 다운로드할 수 있는 구성요소입니다. 다운로드 가능한 플랫폼에는 Android 라이브러리와 시스템 이미지뿐만 아니라 에뮬레이터 스킨과 자세히 알아보세요. Android 4.0에 대한 개발이나 테스트를 시작하려면 Android SDK Manager를 사용하여 플랫폼을 SDK에 다운로드합니다.
API 개요
아래 섹션에서는 Android 4.0의 새 API에 대한 기술 개요를 제공합니다.
연락처 제공자의 소셜 API
ContactsContract
제공자가 정의한 연락처 API는
기기 소유자의 개인 프로필과 같은 새로운 소셜 중심 기능을 지원하도록 확장되었습니다.
사용자가 휴대전화에 설치된 소셜 네트워크에 개별 연락처를 초대할 수 있는 기능을 제공합니다.
있습니다.
사용자 프로필
이제 Android에는
ContactsContract.Profile
테이블 사용자 ID를 유지하는 소셜 앱
ContactsContract.Profile
내에 새 ContactsContract.RawContacts
항목을 만들어 사용자의 프로필 데이터에 기여할 수 있습니다. 즉, 기기 사용자를 나타내는 원시 연락처는
ContactsContract.RawContacts
URI에 의해 정의된 기존 원시 연락처 테이블에 속하지 않음 대신에 프로필 원시 연락처를
CONTENT_RAW_CONTACTS_URI
의 표 원시 데이터
이 표에 있는 연락처는 사용자에게 표시되는 "나"라는 단일 프로필로 집계됩니다.
프로필에 새 원시 연락처를 추가하려면 android.Manifest.permission#WRITE_PROFILE 권한을 부여하는 데 사용될 수 있습니다. 마찬가지로 프로필에서 읽으려면 테이블에서 android.Manifest.permission#READ_PROFILE 권한을 요청해야 합니다. 하지만 대부분의 앱은 확인할 수 있습니다. 사용자 프로필 읽기는 민감한 권한이며 사용자가 다음 작업을 수행할 것으로 예상해야 합니다. 경계할 수 있습니다.
초대 인텐트
INVITE_CONTACT
인텐트 작업은 앱이
를 사용하면 사용자가 소셜 네트워크에 연락처를 추가하려고 함을 나타내는 작업을 호출할 수 있습니다. 앱
수신한 앱은 이를 사용하여 지정된 연락처를 해당 앱에 초대합니다.
소셜 네트워크입니다. 대부분의 앱은 이 작업의 수신단에 있습니다. 예를 들어
사용자가 '연결 추가'를 선택하면 내장된 피플 앱이 초대 인텐트를 호출합니다. 특정
사용자의 연락처 세부정보에 나열된 소셜 애플리케이션입니다.
'연결 추가'에서와 같이 앱을 표시하려면 다음 단계를 따르세요. 앱이 동기화 어댑터를 제공하여
소셜 네트워크의 연락처 정보를 동기화할 수 있습니다. 그런 다음 시스템에 요청할 때
앱이 다음과 같이 INVITE_CONTACT
인텐트에 응답합니다.
앱의 동기화 구성 파일에 inviteContactActivity
속성을 추가하고
초대 인텐트를 보낼 때 시스템이 시작해야 하는 활동의 정규화된 이름입니다.
그러면 시작되는 활동이 인텐트의
네트워크에 연락처를 초대하거나 그 사람을
파악할 수 있습니다.
대용량 사진
이제 Android에서 연락처의 고해상도 사진을 지원합니다. 이제 사진에 사진을 푸시하면
연락처 기록이 있으면 시스템은 이를 96x96 크기의 미리보기 이미지 (이전과 같이)와
256x256 "사진 표시" 새 파일 기반 사진 저장소에 저장되는 파일 (사진이
나중에 시스템에서 선택할 수 있는 옵션은 다를 수 있습니다.) 연락처에 큰 사진을 추가하려면
사진을 PHOTO
열에 표시
데이터 행을 가져와 시스템이 적절한 썸네일 이미지로 처리하고 사진을 표시합니다.
있습니다.
문의 사용 의견
새로운 ContactsContract.DataUsageFeedback
API를 사용하면
사용자가 특정 연락 방법을 사용하는 빈도(예: 특정 연락 수단의 사용 빈도)
이메일 주소를 제공해야 합니다. 이 정보는 각 연락처의 순위를 높이는 데 도움이 됩니다.
방법을 사용하여 각 사용자에게 더 나은 연락을 제안할 수 있습니다.
캘린더 제공자
새로운 캘린더 API를 사용하면 캘린더, 일정, 참석자를 읽고, 추가하고, 수정하고, 삭제할 수 있습니다. 리마인더 및 알림. 캘린더 제공자에 저장됩니다.
다양한 앱과 위젯에서 이러한 API를 사용하여 캘린더 일정을 읽고 수정할 수 있습니다. 하지만 가장 주목할 만한 사용 사례로는 사용자 캘린더를 다른 캘린더 서비스에 연결하여 모든 일정에 대한 통합 위치를 제공할 수 있습니다. 이벤트를 처리합니다. 예를 들어 Google 캘린더 일정은 캘린더 제공자와 동기화됩니다. Google 캘린더 동기화 어댑터를 사용하면 Android 내장 캘린더 앱
캘린더 제공자의 캘린더 및 일정 관련 정보에 대한 데이터 모델은 다음과 같습니다.
CalendarContract
에 의해 정의됨. 사용자의 모든 캘린더 데이터는
CalendarContract
의 다양한 서브클래스에서 정의된 테이블 수:
CalendarContract.Calendars
테이블에는 캘린더별 확인할 수 있습니다 이 표의 각 행에는 캘린더 하나에 대한 세부정보(예: 이름, 색상, 동기화 정보 등이 있습니다.CalendarContract.Events
테이블에는 이벤트별 정보가 있습니다. 이 표의 각 행에는 이벤트 제목, 위치, 시작 시간, 종료 시간 등 이 이벤트는 한 번만 발생하거나 반복될 수 있습니다. 여러 번 반복해야 할 수도 있습니다. 참석자, 알림, 확장된 속성 등은 별도의 테이블에 저장되며 이벤트의_ID
를 사용하여 이벤트에 연결합니다.CalendarContract.Instances
테이블에는 이벤트 발생 횟수 이 테이블의 각 행은 단일 일치하는 항목을 나타냅니다. 일회성 이벤트 이벤트에 대한 일대일 매핑이 있습니다. 반복 일정의 경우 여러 행이 해당 이벤트가 여러 번 발생하는 것에 대응하여 자동으로 생성됩니다.CalendarContract.Attendees
테이블에는 이벤트 참석자 또는 게스트가 있습니다. 확인할 수 있습니다 각 행은 주어진 이벤트의 게스트 한 사람을 나타냅니다. 해당 서비스를 사용할 게스트의 유형을 이벤트에 대한 그 사람의 응답입니다.CalendarContract.Reminders
테이블에는 알림/알림 데이터가 있습니다. 각 행이 주어진 이벤트에 대한 경고 하나를 나타냅니다. 이벤트 하나에 여러 개의 알림이 있을 수 있습니다. 개수 이벤트별 알림은MAX_REMINDERS
에 지정되며 이는 은 지정된 캘린더를 소유합니다. 알림은 이벤트 시작 전 분 단위로 지정됩니다. 알림을 예약하고 알림, 이메일 또는 SMS를 사용하여 알림을 받는 등의 알람 방법을 지정합니다. 있습니다.CalendarContract.ExtendedProperties
테이블에는 불투명한 데이터 필드가 있습니다. 동기화 어댑터에 의해 사용됩니다. 제공업체는 이 테이블의 항목에 대해 삭제 작업 외에는 조치를 취하지 않습니다. 할 수 있습니다.
캘린더 제공자를 통해 사용자의 캘린더 데이터에 액세스하려면 애플리케이션이
READ_CALENDAR
권한 (읽기 액세스용)
WRITE_CALENDAR
(쓰기 액세스용).
이벤트 인텐트
사용자 캘린더에 이벤트를 추가하기만 하려면 ACTION_INSERT
인텐트를 Events.CONTENT_URI
로 정의된 데이터와 함께 사용하여
새 일정을 만드는 캘린더 앱의 활동 인텐트를 사용하면
권한을 부여하고 다음 추가 항목을 사용하여 이벤트 세부정보를 지정할 수 있습니다.
Events.TITLE
: 이벤트CalendarContract.EXTRA_EVENT_BEGIN_TIME
: 이벤트 시작 시간(밀리초) 세대CalendarContract.EXTRA_EVENT_END_TIME
: 이벤트 에포크로부터의 종료 시간(밀리초)Events.EVENT_LOCATION
: 이벤트 위치Events.DESCRIPTION
: 이벤트 설명Intent.EXTRA_EMAIL
: 받는사람의 이메일 주소 초대하다Events.RRULE
: 반복 이벤트 규칙Events.ACCESS_LEVEL
: 이벤트가 비공개인지 공개인지 여부Events.AVAILABILITY
: 이 이벤트의 기간에 다른 이벤트를 동시에 예약할 수 있는지 여부입니다.
음성사서함 제공업체
새로운 음성사서함 제공자를 사용하면 애플리케이션이 사용자의 모든 음성메시지를 하나의 시각적 프레젠테이션에 표시할 수 있어야 합니다. 예를 들면 다음과 같습니다. 사용자가 여러 개의 음성메시지 소스를 가질 수 있습니다. 하나는 전화 서비스 제공업체에서, 다른 하나는 VoIP 또는 다른 대체 음성에서 제공 제공합니다 이러한 앱은 Voicemail Provider API를 사용하여 기기에 음성메시지를 추가할 수 있습니다. 이 그러면 모든 음성메시지가 통합된 프레젠테이션으로 사용자에게 표시됩니다. 시스템의 전화 애플리케이션이 모든 음성메시지를 읽을 수 있는 유일한 애플리케이션이지만 음성메시지를 제공하는 각 애플리케이션은 시스템에 추가된 내용을 읽을 수 있지만 다른 서비스의 음성메시지를 읽을 수 있습니다.
API는 현재 서드 파티 앱이 음성사서함 API를 사용해야 하는 유일한 서드 파티 앱은 음성사서함이 있는 앱뿐입니다. 사용자에게 전송합니다.
VoicemailContract
클래스는 다음에 해당하는 콘텐츠 제공자를 정의합니다.
음성사서함 제공업체 서브클래스 VoicemailContract.Voicemails
및 VoicemailContract.Status
는 앱이
기기에 저장할 음성사서함 데이터를 삽입합니다. 음성사서함 제공업체 앱의 예는 다음을 참고하세요.
음성사서함 제공업체
데모
멀티미디어
Android 4.0은 사진과 같은 미디어와 상호작용하는 애플리케이션을 위해 여러 새로운 API를 추가합니다. 동영상, 음악.
미디어 효과
새로운 미디어 효과 프레임워크를 사용하면 이미지와 동영상에 다양한 시각 효과를 적용할 수 동영상 예를 들어 이미지 효과를 사용하면 적목현상을 쉽게 수정하고, 이미지를 회색조로 변환하거나, 밝기, 채도 조정, 이미지를 회전하고 어안 효과 적용 등 다양한 기능을 사용할 수 있습니다. 이 시스템은 GPU에서 모든 효과 처리를 수행하여 최대 성능을 얻습니다.
성능을 최대로 높이기 위해 효과가 OpenGL 텍스처에 직접 적용되므로 애플리케이션은 효과 API를 사용하려면 유효한 OpenGL 컨텍스트가 있어야 합니다. 적용할 텍스처 비트맵, 동영상 또는 카메라에서 비롯될 수 있습니다. 그러나 텍스처는 다음을 충족해야 합니다.
GL_TEXTURE_2D
텍스처 이미지에 결합되어야 합니다.- 밉맵 수준을 하나 이상 포함해야 합니다.
Effect
객체는 적용할 수 있는 단일 미디어 효과를 정의합니다.
이미지 프레임입니다. Effect
를 만드는 기본 워크플로는 다음과 같습니다.
- OpenGL ES 2.0 컨텍스트에서
EffectContext.createWithCurrentGlContext()
를 호출합니다. - 반환된
EffectContext
를 사용하여 인스턴스를 반환하는EffectContext.getFactory()
를 호출합니다. /EffectFactory
createEffect()
를 호출하여 @link android.media.effect.EffectFactory}의 효과 이름(예:EFFECT_FISHEYE
또는EFFECT_VIGNETTE
)을 사용합니다.
setParameter()
를 호출하고 매개변수 이름과 매개변수 값을 전달하여 효과의 매개변수를 조정할 수 있습니다. 각 효과 유형은
효과 이름과 함께 문서화되어 있습니다. 예를 들어 EFFECT_FISHEYE
에는scale
있습니다.
텍스처에 효과를 적용하려면 apply()
Effect
하고 입력 텍스처, 너비와 높이, 출력을 전달합니다.
만들 수도 있습니다 입력 텍스처는 GL_TEXTURE_2D
텍스처에 결합되어야 합니다.
이미지 (일반적으로 glTexImage2D()
함수)을 사용하세요. 여러 밉맵 수준을 제공할 수 있습니다. 출력 텍스처가 이미지에 바인딩되지 않은 경우
텍스처 이미지가 효과에 의해 자동으로 GL_TEXTURE_2D
로 결합되고 밉맵 수준 (0)이 하나이며 동일한
크기를 입력으로 사용합니다.
EffectFactory
에 나열된 모든 효과가 지원됩니다.
그러나 외부 라이브러리에서 사용할 수 있는 추가 효과 중 일부는 일부 기기에서 지원되지 않으므로
따라서 먼저
isEffectSupported()
원격 제어 클라이언트
새 RemoteControlClient
를 사용하면 미디어 플레이어에서 재생을 사용 설정할 수 있습니다.
원격 제어 클라이언트(예: 기기 잠금 화면)의 제어. 또한 미디어 플레이어는
리모컨에 표시하기 위해 현재 재생 중인 미디어에 관한 정보(예: 트랙)
정보 및 앨범 아트가 표시됩니다.
미디어 플레이어에 원격 제어 클라이언트를 사용 설정하려면 생성자로 RemoteControlClient
를 인스턴스화하고 ACTION_MEDIA_BUTTON
를 브로드캐스트하는 PendingIntent
에 전달합니다. 인텐트는 앱에서 ACTION_MEDIA_BUTTON
이벤트를 처리하는 명시적 BroadcastReceiver
구성요소도 선언해야 합니다.
플레이어가 처리할 수 있는 미디어 컨트롤 입력을 선언하려면setTransportControlFlags()
RemoteControlClient
: 다음과 같은 FLAG_KEY_MEDIA_*
플래그 집합을 전달합니다.
FLAG_KEY_MEDIA_PREVIOUS
및 FLAG_KEY_MEDIA_NEXT
그런 다음 RemoteControlClient
를 MediaManager.registerRemoteControlClient()
에 전달하여 등록해야 합니다.
등록하면 RemoteControlClient
를 인스턴스화할 때 선언한 broadcast receiver가 ACTION_MEDIA_BUTTON
를 수신합니다.
리모컨에서 버튼을 누를 때 이벤트가 발생합니다. 수신하는 인텐트에는 눌린 미디어 키의 KeyEvent
가 포함되며 이 인텐트는 getParcelableExtra(Intent.EXTRA_KEY_EVENT)
를 사용하여 인텐트에서 검색할 수 있습니다.
재생 중인 미디어에 관한 정보를 리모컨에 표시하려면 editMetaData()
를 호출하고 반환된
RemoteControlClient.MetadataEditor
입니다. 미디어 아트워크에 비트맵을 제공하여
숫자 정보(예: 경과 시간) 및 텍스트 정보(예: 트랙 제목) 대상
사용 가능한 키에 관한 정보는 MediaMetadataRetriever
의 METADATA_KEY_*
플래그를 참고하세요.
샘플 구현은 랜덤 음악 플레이어를 참조하세요. Android 4.0에서 원격 제어 클라이언트를 사용 설정하도록 호환성 로직을 제공합니다. Android 2.1까지는 기기를 계속 지원할 수 있습니다.
미디어 플레이어
- 이제
MediaPlayer
에서 온라인 미디어를 스트리밍하려면INTERNET
권한이 필요합니다.MediaPlayer
를 사용하여 인터넷의 콘텐츠를 재생하려면INTERNET
매니페스트에 대한 권한을 부여하지 않으면 Android에서 미디어 재생이 작동하지 않습니다. 4.0. setSurface()
를 사용하면Surface
가 동영상 싱크로 동작하도록 정의할 수 있습니다.setDataSource()
을(를) 사용하면 다음 작업을 할 수 있습니다. 요청과 함께 추가 HTTP 헤더를 전송합니다. 이는 HTTP(S) 라이브 스트리밍에 유용할 수 있습니다.- 이제 HTTP(S) 라이브 스트리밍에서 요청에서 HTTP 쿠키를 준수합니다.
미디어 유형
Android 4.0은 다음 지원을 추가합니다.
- HTTP/HTTPS 실시간 스트리밍 프로토콜 버전 3
- ADTS 원본 AAC 오디오 인코딩
- WEBP 이미지
- Matroska 동영상
자세한 내용은 지원되는 미디어를 참고하세요. 형식을 참고하세요.
카메라
이제 Camera
클래스에 얼굴을 감지하고 제어하는 API가 포함됩니다.
측정 영역을 조정할 수 있습니다.
얼굴 인식
이제 카메라 앱은 Android의 얼굴 인식 API를 사용하여 기능을 개선할 수 있습니다. 피사체의 얼굴만 인식하고 눈과 입과 같은 특정 얼굴 특징도 인식합니다.
카메라 애플리케이션에서 얼굴을 인식하려면 setFaceDetectionListener()
를 호출하여 Camera.FaceDetectionListener
를 등록해야 합니다. 그런 다음
startFaceDetection()
를 호출하여 얼굴 인식을 시작합니다.
시스템이 카메라 장면에서 하나 이상의 얼굴을 감지하면 카메라에서 onFaceDetection()
콜백을 호출합니다.
Camera.FaceDetectionListener
의 구현(예:
Camera.Face
객체
Camera.Face
클래스의 인스턴스는 다음에 관한 다양한 정보를 제공합니다.
다음을 포함하여 인식된 얼굴:
- 카메라의 기준선을 기준으로 얼굴의 경계를 지정하는
Rect
현재 시야 - 객체가 객체임을 시스템이 얼마나 확신하는지 나타내는 1에서 100 사이의 정수입니다. 사람 얼굴
- 여러 얼굴을 추적할 수 있는 고유 ID
- 눈과 입의 위치를 나타내는 여러
Point
객체 위치
참고: 일부 기기에서는 얼굴 인식이 지원되지 않을 수 있습니다.
getMaxNumDetectedFaces()
를 호출하여 확인하고 반환 값이
값이 0보다 큰지 확인합니다. 또한 일부 기기는 눈과 입을 식별하는 기능을 지원하지 않을 수 있습니다.
이 경우 Camera.Face
객체의 필드는 null입니다.
초점 및 측정 영역
이제 카메라 앱은 카메라가 초점과 흰색 측정에 사용하는 영역을 제어할 수 있습니다.
잔액
사용할 수 있습니다. 두 기능 모두 새로운 Camera.Area
클래스를 사용하여
초점을 맞추거나 측정해야 하는 카메라의 현재 보기 영역 Camera.Area
클래스의 인스턴스는 Rect
가 있는 영역의 경계와 영역의 가중치를 정의하여 그 중요도의 수준을 나타냅니다.
고려 중인 다른 영역 대비 면적(정수)을 반환합니다.
포커스 영역이나 측정 영역을 설정하기 전에 먼저 getMaxNumFocusAreas()
또는 getMaxNumMeteringAreas()
를 각각 호출해야 합니다. 이 값이 0을 반환하면
기기에서 해당 기능을 지원하지 않는 경우.
사용할 포커스 또는 측정 영역을 지정하려면 setFocusAreas()
또는 setMeteringAreas()
를 호출하면 됩니다. 각각은 고려할 영역을 나타내는 Camera.Area
객체의 List
를 사용합니다.
사용합니다. 예를 들어 사용자가
미리보기 영역을 터치하여 포커스 영역을 설정하면 Camera.Area
객체로 변환되고 카메라가 장면의 해당 영역에 포커스를 맞추도록 요청합니다.
해당 영역의 초점이나 노출은 해당 영역의 장면이 변경됨에 따라 계속 업데이트됩니다.
사진 자동 초점 계속 맞추기
이제 사진을 찍을 때 연속 자동 초점 (CAF)을 사용 설정할 수 있습니다. 기기에서 CAF를 사용 설정하려면 다음 안내를 따르세요.
카메라 앱, FOCUS_MODE_CONTINUOUS_PICTURE
전달
setFocusMode()
에게 전송합니다. 캡처할 준비가 되었을 때
autoFocus()
를 호출합니다. Camera.AutoFocusCallback
는 즉시 콜백을 수신하여
초점을 맞췄습니다. 콜백을 수신한 후 CAF를 재개하려면 cancelAutoFocus()
를 호출해야 합니다.
참고: 캡처할 때 연속 자동 초점도 지원됩니다.
FOCUS_MODE_CONTINUOUS_VIDEO
를 사용한
API 수준 9에 추가되었습니다.
기타 카메라 기능
- 이제 동영상을 녹화하는 동안
takePicture()
를 호출하여 동영상 세션을 중단하지 않고도 사진을 저장할 수 있습니다. 그렇게 하기 전에isVideoSnapshotSupported()
를 호출하여 지원합니다 - 이제
setAutoExposureLock()
및setAutoWhiteBalanceLock()
로 자동 노출과 화이트 밸런스를 잠가서 이러한 속성이 변경되는 것을 방지합니다. - 이제 카메라 미리보기가 실행되는 동안
setDisplayOrientation()
를 호출할 수 있습니다. 이전에는 이를 언제든지 방향을 변경할 수 있습니다.
카메라 브로드캐스트 인텐트
Camera.ACTION_NEW_PICTURE
: 이는 사용자가 새 사진을 캡처했음을 나타냅니다. 내장된 카메라 앱은 앱이 캡처된 후 브로드캐스트되며 서드 파티 카메라 앱도 이 인텐트를 브로드캐스트해야 합니다. 사진 촬영 후의 화면입니다.Camera.ACTION_NEW_VIDEO
: 이는 사용자가 새 동영상을 캡처했음을 나타냅니다. 내장된 카메라 앱은 서드 파티 카메라 앱도 이 인텐트를 브로드캐스트해야 하며 동영상 녹화를 시작할 수 있습니다.
Android Beam (NFC로 NDEF 푸시)
Android Beam은 한 기기에서 여러 기기로 NDEF 메시지를 전송할 수 있게 하는 새로운 NFC 기능입니다. 다른 프로세스('NDEF 푸시'라고도 함)를 사용합니다. 데이터 전송은 두 개의 Android Beam을 지원하는 Android 기기는 가까운 거리 (약 4cm)에 있으며, 일반적으로 아이들의 등을 만지고 있습니다. NDEF 메시지 내의 데이터에는 공유하려는 데이터가 모두 포함될 수 있습니다. 발생하게 됩니다. 예를 들어 피플 앱은 연락처를 공유하고, YouTube는 동영상을 공유하고 브라우저를 사용합니다. Android Beam을 사용하여 URL을 공유합니다.
Android Beam을 사용하여 기기 간에 데이터를 전송하려면 활동이 진행되는 동안 공유하려는 정보가 포함된 NdefMessage
를 만들어야 합니다.
있습니다. 그런 다음 둘 중 하나에서 NdefMessage
를 시스템에 전달해야 합니다.
있습니다.
- 활동 중에 푸시할 단일
NdefMessage
를 정의합니다.언제든지
setNdefPushMessage()
를 호출하여 설정할 수 있습니다. 선택합니다. 예를 들어 활동의onCreate()
중에 이 메서드를 호출하고NdefMessage
에 전달할 수 있습니다. 메서드를 사용하여 축소하도록 요청합니다. 그런 다음 활동이 포그라운드에서는 시스템이NdefMessage
를 다른 기기로 전송합니다. - Android Beam이 시작될 때 푸시할
NdefMessage
를 정의합니다.NfcAdapter.CreateNdefMessageCallback
를 구현합니다. 여기서createNdefMessage()
의 구현 메서드는 전송하려는NdefMessage
를 반환합니다. 그런 다음NfcAdapter.CreateNdefMessageCallback
구현을setNdefPushMessageCallback()
에 전달합니다.이 경우 활동이 포그라운드에서는 시스템이
createNdefMessage()
를 호출하여 보내려는NdefMessage
입니다. 이렇게 하면 콘텐츠가 Android Beam이 시작된 경우에만 전송하도록NdefMessage
를 정의할 수 있습니다. 메시지의 수명 주기 동안 다를 수 있습니다.
시스템이 NDEF를 성공적으로 전달한 후 특정 코드를 실행하려는 경우
메시지가 다른 기기에 전달되도록 하려면 NfcAdapter.OnNdefPushCompleteCallback
를 구현하고 setNdefPushCompleteCallback()
로 설정할 수 있습니다. 시스템에서
메시지가 전달되면 onNdefPushComplete()
를 호출합니다.
수신 기기에서 시스템이 일반 NFC와 비슷한 방식으로 NDEF 푸시 메시지를 발송합니다.
태그 사이에 있어야 합니다. 시스템이 ACTION_NDEF_DISCOVERED
를 사용하여 인텐트를 호출합니다.
NdefMessage
의 첫 번째 NdefRecord
에 따라 설정된 URL 또는 MIME 유형으로 활동을 시작하는 작업입니다. 원하는 활동에서
을 사용하면 앱이 관심을 두는 URL이나 MIME 유형에 대해 인텐트 필터를 선언할 수 있습니다. 자세한 내용은
태그 디스패치에 대한 자세한 내용은 NFC 개발자 가이드를 참조하세요.
NdefMessage
가 URI를 전달하도록 하려면 이제
createUri
메서드를 사용하여 문자열이나 Uri
객체를 기반으로 새 NdefRecord
를 구성합니다. URI가
애플리케이션이 수신하기를 원하는 특별한 형식으로 된 경우, 개발자는
동일한 URI 구성표를 사용하여 액티비티에 대한 인텐트 필터를 생성해야 합니다. 이렇게 하면
수신 NDEF 메시지
또한 'Android 애플리케이션 레코드' 다음 기기에서 NdefMessage
기기로
다른
애플리케이션이 동일한 인텐트 작업을 필터링합니다. Android 애플리케이션 레코드를 만드는 방법은 다음과 같습니다.
createApplicationRecord()
를 호출하여
. 다른 기기가
여러 애플리케이션에 지정된 인텐트를 처리하는 활동이 포함되어 있고
(일치하는 모든 요청에 따라) 시스템은 항상 애플리케이션의 액티비티에 메시지를 전달합니다.
애플리케이션 레코드) 현재 대상 기기에 애플리케이션이 설치되어 있지 않으면
시스템은 Android 애플리케이션 기록을 사용하여 Google Play를 실행하고 사용자를
설치해야 합니다.
애플리케이션이 NFC API를 사용하여 NDEF 푸시 메시징을 수행하지 않는 경우, Android는 기본 동작: 애플리케이션이 한 기기에서 포그라운드에 있고 Android Beam이 사용 중인 경우 다른 Android 지원 기기에서 호출되면 다른 기기는 애플리케이션을 식별하는 Android 애플리케이션 레코드입니다. 수신 기기에 애플리케이션이 설치되면 시스템이 실행합니다. 설치되지 않은 경우 Google Play가 열리고 해야 합니다.
Android Beam 및 기타 NFC 기능에 대한 자세한 내용은 NFC 기본사항 개발자 가이드를 참조하세요. 예시 코드의 경우 자세한 내용은 Android Beam Beam 데모
Wi-Fi P2P
Android는 이제 Android 지원 기기 및 Android 모바일 기기 간의 Wi-Fi P2P 연결을 기타 기기 유형 (Wi-Fi Alliance의 Wi-Fi DirectTM 인증 프로그램)을 다운로드할 수 있습니다. Android 프레임워크는 각 기기가 있을 때 다른 기기를 검색하고 연결할 수 있게 하는 Wi-Fi P2P API 집합입니다. Wi-Fi P2P를 지원할 수 있고, 훨씬 더 긴 거리에 있는 빠른 연결을 통해 통신할 수 있음 Bluetooth 연결
새 패키지인 android.net.wifi.p2p
에는 P2P 실행을 위한 모든 API가 포함되어 있습니다.
Wi-Fi로 연결할 수 있게 해 줍니다. 작업해야 하는 기본 클래스는 WifiP2pManager
이며 getSystemService(WIFI_P2P_SERVICE)
를 호출하여 가져올 수 있습니다. WifiP2pManager
에는 다음 작업을 할 수 있는 API가 포함되어 있습니다.
initialize()
를 호출하여 P2P 연결을 위해 애플리케이션 초기화discoverPeers()
를 호출하여 근처 기기 찾기connect()
를 호출하여 P2P 연결을 시작합니다.- 기타
다음과 같은 몇 가지 다른 인터페이스와 클래스도 필요합니다.
WifiP2pManager.ActionListener
인터페이스를 사용하면 피어 검색 또는 연결과 같은 작업이 성공하거나 실패할 때 콜백을 호출합니다.WifiP2pManager.PeerListListener
인터페이스를 사용하면 관련 정보를 제공합니다 이 콜백은WifiP2pDeviceList
를 제공합니다. 여기에서 범위 내 각 기기의WifiP2pDevice
객체를 검색하고 다음과 같은 정보를 가져올 수 있습니다. 기기 이름, 주소, 기기 유형, 기기에서 지원하는 WPS 구성 등.WifiP2pManager.GroupInfoListener
인터페이스를 사용하면 다음 작업을 할 수 있습니다. P2P 그룹에 대한 정보를 받을 수 있습니다. 이 콜백은WifiP2pGroup
객체를 제공하며 이 객체는 소유자, 설정할 수 있습니다WifiP2pManager.ConnectionInfoListener
인터페이스를 사용하면 다음 작업을 할 수 있습니다. 현재 연결에 대한 정보를 수신합니다. 이 콜백은 그룹이 이미 만들어졌는지 여부 등의 정보가 포함된WifiP2pInfo
객체를 제공합니다. 그룹 소유자입니다.
Wi-Fi P2P API를 사용하려면 앱에서 다음과 같은 사용자 권한을 요청해야 합니다.
ACCESS_WIFI_STATE
CHANGE_WIFI_STATE
INTERNET
(앱이 기술적으로 연결되지는 않음) 표준 자바 소켓으로 Wi-Fi P2P 피어와 통신하려면 인터넷이 필요합니다. 권한이 있는지 확인하세요.
또한 Android 시스템은 특정 Wi-Fi P2P 이벤트 중에 여러 다른 작업을 브로드캐스트합니다.
WIFI_P2P_CONNECTION_CHANGED_ACTION
: P2P 연결 상태가 변경되었습니다. 이는WifiP2pInfo
객체가 있는EXTRA_WIFI_P2P_INFO
와NetworkInfo
가 있는EXTRA_NETWORK_INFO
를 전달합니다. 객체를 지정합니다.WIFI_P2P_STATE_CHANGED_ACTION
: P2P 상태는 사용 설정 및 사용 중지 간에 변경됩니다.WIFI_P2P_STATE_DISABLED
또는WIFI_P2P_STATE_ENABLED
와 함께EXTRA_WIFI_STATE
를 전달합니다.WIFI_P2P_PEERS_CHANGED_ACTION
: 동종 앱 목록 기기가 변경되었습니다.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
: 기기가 변경되었습니다.
자세한 내용은 WifiP2pManager
문서를 참고하세요. 또한
이
Wi-Fi P2P 데모
샘플 애플리케이션입니다.
Bluetooth 건강 관리 기기
Android는 이제 블루투스 건강 프로필 기기를 지원하므로 심박수 모니터, 블루투스 등 블루투스를 지원하는 의료 기기와 통신할 수 있는 블루투스 혈액 측정기, 체온계, 체중계가 포함됩니다.
일반 헤드셋 및 A2DP 프로필 기기와 마찬가지로 BluetoothProfile.ServiceListener
및 HEALTH
프로필 유형으로 getProfileProxy()
를 호출하여 프로필과 연결을 설정해야 합니다.
프록시 객체입니다.
건강 프로필 프록시 (BluetoothHealth
)를 획득한 후
페어링된 의료 기기)에 연결하고 이 기기와 통신하려면 다음과 같은 새로운
블루투스 클래스:
BluetoothHealthCallback
: 이 클래스를 확장하고 애플리케이션의 등록 상태 변경사항 관련 업데이트를 수신하는 콜백 메서드와 블루투스 채널 상태입니다.BluetoothHealthAppConfiguration
:BluetoothHealthCallback
콜백 중에 이 객체의 인스턴스를 수신하게 되며 는 사용 가능한 블루투스 의료 기기에 대한 구성 정보를 제공하며, 이는 반드시 사용해야 합니다. 을 사용하여BluetoothHealth
API로 연결 시작 및 종료와 같은 다양한 작업을 실행합니다.
블루투스 건강 프로필 사용에 관한 자세한 내용은 BluetoothHealth
문서를 참고하세요.
접근성
Android 4.0은 새로운 터치하여 탐색 모드로 시각장애인 사용자를 위한 접근성을 개선합니다. 콘텐츠 보기 또는 조회에 대한 자세한 정보를 제공할 수 있는 최첨단 접근성 서비스 개발에 착수했습니다.
터치하여 탐색 모드
시각 장애가 있는 사용자는 이제 화면 너머로 손가락을 터치하고 드래그하여
화면의 음성 설명을 들을 수 있습니다 터치하여 탐색 모드는
가상 커서가 있으면 스크린 리더가 화면과 동일한 방식으로 설명 텍스트를 식별할 수 있도록 합니다.
사용자가 D패드나 트랙볼로 탐색할 때 독자층은 제공된 정보를 읽고
시뮬레이션된 '마우스 오버' 시 android:contentDescription
, setContentDescription()
이벤트를 처리합니다. 따라서
보기의 설명에 대한 설명 텍스트를 제공해야 한다는 점을 기억해 주세요.
특히 ImageButton
, EditText
의 경우
ImageView
및 설명이 포함되어 있지 않을 수 있는 기타 위젯
있습니다.
뷰 접근성
스크린 리더와 같은 접근성 서비스에서 사용할 수 있는 정보를 향상하기 위해 다음과 같은 작업을 수행할 수 있습니다.
맞춤 View
구성요소에 접근성 이벤트를 위한 새 콜백 메서드를 구현합니다.
먼저 Android에서 sendAccessibilityEvent()
메서드의 동작이 변경되었다는 점에 유의해야 합니다.
4.0. 이전 버전의 Android와 마찬가지로 사용자가 기기에서 접근성 서비스를 사용 설정할 때
클릭 또는 마우스 오버와 같은 입력 이벤트가 발생하면 각 뷰에
sendAccessibilityEvent()
이전에는
sendAccessibilityEvent()
를 구현하면
AccessibilityEvent
를 초기화하고 AccessibilityManager
로 전송합니다. 새 동작에는 추가 콜백이 포함됩니다.
뷰와 상위 요소가 이벤트에 더 많은 컨텍스트 정보를 추가할 수 있게 해주는 메서드를 호출합니다.
- 호출되면
sendAccessibilityEvent()
및sendAccessibilityEventUnchecked()
메서드가onInitializeAccessibilityEvent()
에게 전송합니다.View
의 맞춤 구현은onInitializeAccessibilityEvent()
를 구현하여 추가 접근성 정보를AccessibilityEvent
에 첨부하지만 다음과 같이 super 구현도 호출해야 합니다. 은 표준 콘텐츠 설명, 항목 색인 등과 같은 기본 정보를 제공합니다. 그러나 이 콜백에 추가 텍스트 콘텐츠를 추가해서는 안 됩니다. 있습니다. - 초기화된 이벤트가 텍스트로 채워져야 하는 여러 유형 중 하나인 경우
뷰는
dispatchPopulateAccessibilityEvent()
호출을 수신합니다.onPopulateAccessibilityEvent()
를 따릅니다. 있습니다.View
의 맞춤 구현은 일반적으로onPopulateAccessibilityEvent()
를 구현하여android:contentDescription
텍스트가 누락된 경우 텍스트 콘텐츠를AccessibilityEvent
에 추가하거나 충분하지 않습니다. 다음에 더 많은 텍스트 설명을 추가하려면AccessibilityEvent
,getText()
.add()
호출 - 이 시점에서
View
는 다음을 호출하여 이벤트를 뷰 계층 구조 위로 전달합니다.requestSendAccessibilityEvent()
, 보호자 화면 모드입니다. 그러면 각 상위 뷰는AccessibilityRecord
가 추가될 때까지 궁극적으로 루트 뷰에 도달하여sendAccessibilityEvent()
와 함께AccessibilityManager
에 이벤트를 전송합니다.
View
클래스를 확장할 때 유용한 위의 새 메서드 외에도 AccessibilityDelegate
를 확장하고 다음과 같이 뷰에 설정하여 View
에서 이러한 이벤트 콜백을 가로챌 수도 있습니다.
setAccessibilityDelegate()
입니다.
이렇게 하면 뷰의 각 접근성 메서드는
있습니다. 예를 들어 뷰가 onPopulateAccessibilityEvent()
호출을 수신하면 이 호출을
View.AccessibilityDelegate
에서 같은 메서드를 사용할 수 있습니다. Google Cloud Platform에서 처리하지 않는
위임은 기본 동작을 위해 뷰에 바로 다시 제공됩니다. 이렇게 하면
View
클래스를 확장하지 않고 지정된 뷰에 필요한 메서드 호출
Android 4.0 이전 버전과의 호환성을 유지하고 Android 버전 4.0 최신 버전의 v4 지원과 함께 사용할 수 있습니다. 라이브러리 (호환성 패키지, r4에서) 이전 버전과 호환되는 새 접근성 API를 제공하는 유틸리티 클래스 집합을 사용하여 설계했습니다.
접근성 서비스
접근성 서비스를 개발하는 경우 다양한 접근성 이벤트에 대한 정보 사용자에게 고급 접근성 피드백을 제공할 수 있도록 크게 확장되었습니다. 포함 특히 이벤트가 뷰 구성에 따라 생성되어 더 나은 컨텍스트 정보와 접근성 서비스가 뷰 계층 구조를 순회하여 추가적인 뷰 정보를 얻고 특수 사례를 처리합니다
스크린 리더와 같은 접근성 서비스를 개발하는 경우 다음 절차에 따라 추가 콘텐츠 정보를 생성하고 뷰 계층 구조를 순회할 수 있습니다.
- 애플리케이션에서
AccessibilityEvent
를 수신하면AccessibilityEvent.getRecord()
를 호출하여 특정AccessibilityRecord
를 검색합니다( 이벤트). AccessibilityEvent
또는 개별AccessibilityRecord
에서getSource()
를 호출하여AccessibilityNodeInfo
객체를 검색할 수 있습니다.AccessibilityNodeInfo
는 단일 노드를 나타냅니다. 이에 대한 접근성 정보를 쿼리할 수 있는 형식으로 표시되는 노드입니다AccessibilityEvent
에서 반환된AccessibilityNodeInfo
객체는 이벤트 소스를 설명하는 반면AccessibilityRecord
는 이벤트의 전반을 설명합니다. 있습니다.AccessibilityNodeInfo
를 사용하면getParent()
또는getChild()
를 호출하여 뷰를 순회합니다. 노드에 하위 뷰를 추가할 수도 있습니다.
애플리케이션이 접근성 서비스로 시스템에 자체적으로 게시하게 하려면
AccessibilityServiceInfo
에 해당하는 XML 구성 파일을 선언해야 합니다. 컨테이너 생성에 대한 자세한 내용은
접근성 서비스에 관해 자세히 알아보세요. XML 구성에 관한 자세한 내용은 AccessibilityService
및 SERVICE_META_DATA
를 참고하세요.
기타 접근성 API
기기의 접근성 상태에 관심이 있다면 AccessibilityManager
에 다음과 같은 새로운 API가 있습니다.
AccessibilityManager.AccessibilityStateChangeListener
접근성이 사용 설정되거나 사용자가 콜백을 수신할 때마다 콜백을 수신할 수 있는 인터페이스입니다. 사용 중지됩니다.getEnabledAccessibilityServiceList()
는 어떤 접근성 서비스에 관한 정보를 제공하나요? 현재 사용 설정되어 있습니다.isTouchExplorationEnabled()
알림 터치하여 탐색 모드의 사용 설정 여부를 확인할 수 있습니다.
맞춤법 검사기 서비스
새로운 맞춤법 검사기 프레임워크를 사용하면 앱이
입력 방법 프레임워크 (IME용) 새 맞춤법 검사기를 만들려면
확장
SpellCheckerService
하고 SpellCheckerService.Session
클래스를 확장하여 다음을 기반으로 맞춤법 제안을 제공합니다.
(인터페이스의 콜백 메서드에서 제공하는 텍스트에서) SpellCheckerService.Session
콜백 메서드에서
SuggestionsInfo
객체로 맞춤법 제안을 제공합니다.
맞춤법 검사기 서비스가 포함된 애플리케이션은 서비스에 필요한 BIND_TEXT_SERVICE
권한을 선언해야 합니다.
또한 서비스는 <action
android:name="android.service.textservice.SpellCheckerService" />
를 인텐트의 작업으로 사용하여 인텐트 필터를 선언해야 하며
주문의 구성 정보를 선언하는 <meta-data>
요소 포함
검사기
샘플 보기 맞춤법 검사기 서비스 앱과 샘플 맞춤법 검사기 클라이언트 앱에 있는 샘플 코드
텍스트 음성 변환 엔진
Android의 텍스트 음성 변환 (TTS) API는 애플리케이션이 맞춤 TTS 엔진을 더 쉽게 구현할 수 있는 반면, TTS 엔진을 사용하려는 애플리케이션에는 엔진 선택을 위한 몇 개의 새 API가 있습니다.
텍스트 음성 변환 엔진 사용
이전 버전의 Android에서는 TextToSpeech
클래스를 사용할 수 있었습니다.
을 사용하여 시스템에서 제공하는 TTS 엔진을 사용하여 TTS (텍스트 음성 변환) 작업을 수행하거나
커스텀 엔진을 setEngineByPackageName()
사용하세요. Android 4.0에서는 setEngineByPackageName()
메서드가 다음과 같이 적용되었습니다.
지원 중단되었으며 이제 TTS 엔진의 패키지 이름을 허용하는 새 TextToSpeech
생성자와 함께 사용하도록 엔진을 지정할 수 있습니다.
getEngines()
로 사용 가능한 TTS 엔진을 쿼리할 수도 있습니다. 이 메서드는 엔진의 객체와 같은 메타데이터가 포함된 TextToSpeech.EngineInfo
객체의 목록을 반환합니다.
아이콘, 라벨, 패키지 이름을
지정할 수 있습니다
텍스트 음성 변환 엔진 빌드
이전에는 맞춤 엔진에서 문서화되지 않은 네이티브 헤더를 사용하여 엔진을 빌드해야 했습니다. 파일에서 참조됩니다. Android 4.0에는 TTS 엔진을 빌드하기 위한 완전한 프레임워크 API 세트가 있습니다.
기본 설정에는 다음과 같은 TextToSpeechService
구현이 필요합니다.
INTENT_ACTION_TTS_SERVICE
인텐트에 응답합니다. 이
TTS 엔진의 기본 작업은 서비스의 onSynthesizeText()
콜백 중에 발생합니다.
이는 TextToSpeechService
를 확장합니다. 시스템은 이 방법을
객체:
SynthesisRequest
: 여기에는 언어, 말하기 속도 및 음조를 조정합니다.SynthesisCallback
: TTS 엔진이 사용하는 인터페이스입니다. 결과 음성 데이터를 스트리밍 오디오로 전달합니다. 먼저 엔진은start()
를 호출하여 엔진이 게재할 준비가 되었음을 나타내야 합니다. 그런 다음audioAvailable()
를 호출합니다. 바이트 버퍼의 오디오 데이터를 전달합니다. 엔진이 모든 오디오를done()
를 호출합니다.
이제 프레임워크가 TTS 엔진 생성을 위한 실제 API를 지원하므로 네이티브 코드를 지원합니다. 구현이 삭제되었습니다. 호환성 레이어에 관한 블로그 게시물 찾기 이전 TTS 엔진을 새 프레임워크로 변환하는 데 사용할 수 있습니다.
새 API를 사용하는 TTS 엔진의 예는 TTS(텍스트 음성 변환) 엔진 샘플 앱을 참조하세요.
네트워크 사용
Android 4.0은 애플리케이션이 사용 중인 네트워크 데이터의 양을 사용자가 정확히 파악할 수 있도록 합니다. 설정 앱은 사용자가 설정된 네트워크 데이터 사용량 한도를 관리할 수 있는 제어 기능 및 개별 앱의 백그라운드 데이터 사용을 중지할 수도 있습니다. 사용자가 귀하의 Google 계정을 앱이 백그라운드에서 데이터에 액세스하지 못하도록 하려면 데이터를 사용하는 전략을 개발해야 합니다. 사용 가능한 연결 유형에 따라 사용량을 조정할 수 있습니다.
애플리케이션이 많은 네트워크 트랜잭션을 수행하는 경우
사용자가 앱의 데이터 습관(예: 앱의 데이터 동기화 빈도, 데이터 동기화 여부)을
로밍 시 데이터 사용 여부 등 Wi-Fi에 연결되어 있을 때만 업로드/다운로드를 수행합니다.
제어 기능을 사용하지 못할 때 사용자가 앱의 데이터 액세스를 사용 중지할 가능성이
한계에 가까워집니다. 대신 앱에서 사용하는 데이터의 양을 정밀하게 제어할 수 있기 때문입니다.
이러한 설정이 포함된 환경설정 활동을 제공하는 경우 매니페스트에 포함해야 합니다.
ACTION_MANAGE_NETWORK_USAGE
의 인텐트 필터 선언
있습니다. 예를 들면 다음과 같습니다.
<activity android:name="DataPreferences" android:label="@string/title_preferences"> <intent-filter> <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
이 인텐트 필터는 애플리케이션이 할 수 있습니다. 따라서 사용자가 설정 앱, '애플리케이션 설정 보기' 버튼을 사용하여 사용자가 앱에서 사용하는 데이터 양을 미세 조정할 수 있도록 환경설정 활동.
또한 getBackgroundDataSetting()
가 이제
지원 중단되고 항상 true를 반환합니다. 대신 getActiveNetworkInfo()
를 사용하세요. 네트워크를 시도하기 전에
항상 getActiveNetworkInfo()
를 호출해야 합니다.
현재 네트워크를 나타내는 NetworkInfo
를 가져오고 isConnected()
를 쿼리하여 기기에
연결 그런 다음 기기가 인터넷에 연결되었는지 여부 등 다른 연결 속성을
Wi-Fi에 연결되어 있어야 합니다.
Enterprise
Android 4.0은 다음 기능을 통해 엔터프라이즈 애플리케이션 기능을 확장합니다.
VPN 서비스
새로운 VpnService
를 사용하면 애플리케이션이 자체 VPN (가상 연결)을
Service
로 실행되는 비공개 네트워크 VPN 서비스는
자체 주소 및 라우팅 규칙이 있는 가상 네트워크로 라우팅되며 단일 IP 주소를 사용하여
파일 설명자입니다.
VPN 서비스를 만들려면 VpnService.Builder
를 사용하세요. 그러면 VPN 서비스를
네트워크 주소, DNS 서버, 네트워크 경로 등이 있습니다. 완료되면
인터페이스를 사용하여 establish()
을 반환하며 이는 ParcelFileDescriptor
을 반환합니다.
VPN 서비스가 패킷을 가로챌 수 있기 때문에 보안에 영향을 미칠 수 있습니다. 따라서
VpnService
를 구현하면 시스템만 바인딩할 수 있도록 서비스에 BIND_VPN_SERVICE
를 요구해야 합니다.
시스템에 이 권한이 부여되어 앱에서 이를 요청할 수 없음). VPN 서비스를 사용하려면
사용자는 시스템 설정에서 이를 수동으로 사용 설정해야 합니다.
기기 정책
기기 제한을 관리하는 애플리케이션에서 이제 setCameraDisabled()
및 USES_POLICY_DISABLE_CAMERA
속성 (정책 구성 파일의 <disable-camera />
요소와 함께 적용됨)을 사용하여 카메라를 사용 중지할 수 있습니다.
인증서 관리
새 KeyChain
클래스는 가져오기 및 액세스가 가능한 API를 제공합니다.
시스템 키 저장소에 있습니다 인증서는 두 클라이언트의 설치를 간소화합니다.
인증서 (사용자 ID 검증용) 및 인증 기관 인증서 (사용자 인증 정보
서버 ID 확인). 웹 브라우저 또는 이메일 클라이언트와 같은 애플리케이션은 설치된
인증서를 사용하여 서버에 사용자를 인증합니다. KeyChain
를 참고하세요.
문서를 참조하세요.
기기 센서
Android 4.0에는 두 가지 새로운 센서 유형이 추가되었습니다.
TYPE_AMBIENT_TEMPERATURE
: 온도 센서는 주변 (방) 온도를 섭씨 단위로 나타냅니다.TYPE_RELATIVE_HUMIDITY
: 상대 주변 (방) 습도를 백분율로 나타낸 것입니다.
기기에 TYPE_AMBIENT_TEMPERATURE
및 TYPE_RELATIVE_HUMIDITY
센서가 모두 있으면 이 센서를 사용하여 이슬점을 계산할 수 있습니다.
알 수 있습니다.
이전 온도 센서 TYPE_TEMPERATURE
는
지원 중단되었습니다. TYPE_AMBIENT_TEMPERATURE
센서를 사용해야 합니다.
하세요.
또한 Android의 3가지 합성 센서가 크게 개선되어
더 매끄러운 출력을
제공할 수 있습니다 이러한 센서에는 중력 센서 (TYPE_GRAVITY
), 회전 벡터 센서 (TYPE_ROTATION_VECTOR
), 선형 가속 센서 (TYPE_LINEAR_ACCELERATION
)가 포함됩니다. 개선된 센서는 자이로스코프에 의해
출력을 개선할 수 있도록 센서가 자이로스코프가 있는 기기에만 표시됩니다.
작업 모음
여러 가지 새로운 동작을 지원하도록 ActionBar
가 업데이트되었습니다. 대부분
중요한 점은 시스템에서 작업 표시줄의 크기와 구성을 원활하게 관리하는 것입니다.
모든 화면 크기에서 최적의 사용자 환경을 제공하도록 설계되었습니다. 예를 들어
화면이 좁을 때 (예: 핸드셋이 세로 모드 방향일 때) 작업 표시줄의
탐색 탭은 '누적 바'에 표시되며 이 메뉴는 기본 작업 모음 바로 아래에 표시됩니다. 다음과 같은 작업을 할 수 있습니다.
'분할 작업 모음'을 선택하거나 하단에 있는 별도의 표시줄에 모든 작업 항목을 배치합니다.
닫히지 않도록 하기 위해 사용됩니다.
작업 모음 분할
작업 모음에 여러 작업 항목이 포함된 경우 일부 작업 항목은 작업 모음에 맞지 않습니다.
더 많이 더보기 메뉴에 표시됩니다. 하지만 Android 4.0은
'작업 모음 분할'을 사용 설정할 수 있으며 이렇게 하면
화면 하단에 별도의 막대가 있습니다. 분할 작업 모음을 사용 설정하려면 "splitActionBarWhenNarrow"
와 함께 android:uiOptions
를
<application>
태그 또는
개별 <activity>
태그
매니페스트 파일에 포함됩니다. 이 기능을 사용하도록 설정하면 시스템에서 광고의 하단에 막대를
화면이 좁을 때 모든 작업 항목 화면 (기본에 작업 항목이 표시되지 않음)
합니다.
ActionBar.Tab
API에서 제공하는 탐색 탭을 사용하려면 다음 안내를 따르세요.
맨 위에 기본 작업 표시줄을 두지 않고 (탭만 상단에 표시하기를 원함)
위에서 설명한 대로 분할 작업 모음을 실행하고 setDisplayShowHomeEnabled(false)
도 호출하여
애플리케이션 아이콘을 탭합니다 기본 작업 모음에 아무것도 남아 있지 않으면
사라집니다. 그러면 상단의 탐색 탭과 탭에 있는 작업 항목만
화면 하단에 위치합니다.
작업 모음 스타일
작업 모음에 맞춤 스타일을 적용하려면 새로운 스타일 속성 backgroundStacked
와 backgroundSplit
를 사용하여 배경을 적용하면 됩니다.
드로어블 또는 색상을 누적 막대와 분할 막대에 각각 할당합니다. 다음 위치에서 스타일을 설정할 수도 있습니다.
setStackedBackgroundDrawable()
및 setSplitBackgroundDrawable()
런타임
작업 제공자
새로운 ActionProvider
클래스를 사용하면
작업 항목 작업 제공자는 작업 뷰, 기본 작업 동작, 하위 메뉴를 정의할 수 있음
작업 항목마다 하나씩 전달됩니다. 작업 항목을 만들 때
동적 동작 (예: 가변적인 작업 뷰, 기본 작업, 하위 메뉴)을 사용하는 경우 ActionProvider
를 확장하는 것은 재사용 가능한 구성요소를 만들기보다는
여러 작업 항목 변환을 처리하는 방법을 보여줍니다.
예를 들어 ShareActionProvider
는 '공유'를 용이하게 하는 ActionProvider
의 확장 프로그램입니다. 작업을 삭제합니다. kubectl 명령어
ACTION_SEND
인텐트를 호출하는 기존 작업 항목에 관해서는 다음과 같은 작업을 할 수 있습니다.
이 작업 제공자를 사용해
ACTION_SEND
인텐트 사용자가 사용할 애플리케이션을 선택할 때
ShareActionProvider
는 이 선택사항을 기억하고
해당 앱과 더 빠르게 공유할 수 있습니다.
작업 항목의 작업 제공자를 선언하려면 android:actionProviderClass
를 포함합니다.
활동의 클래스 이름과 함께 활동 옵션 메뉴의 <item>
요소에서 속성
provider를 값으로 사용합니다. 예를 들면 다음과 같습니다.
<item android:id="@+id/menu_share" android:title="Share" android:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" />
내 활동의 onCreateOptionsMenu()
콜백 메서드를 호출하고 메뉴 항목에서 작업 제공자의 인스턴스를 가져오고
인텐트:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options, menu) val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider // Set the share intent of the share action provider. shareActionProvider?.setShareIntent(createShareIntent()) ... return super.onCreateOptionsMenu(menu) }
자바
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider(); // Set the share intent of the share action provider. shareActionProvider.setShareIntent(createShareIntent()); ... return super.onCreateOptionsMenu(menu); }
ShareActionProvider
를 사용하는 예는 ApiDemos의 ActionBarShareActionProviderActivity를 참조하세요.
접을 수 있는 작업 뷰
이제 작업 뷰를 제공하는 작업 항목은 작업 뷰 상태와
작업 항목 상태가 됩니다 이전에는 SearchView
만 지원되었습니다.
작업 뷰로 사용할 때 축소되지만 이제 모든 작업 항목에 대한 작업 뷰를 추가하고
펼쳐진 상태 (작업 보기가 표시됨)와 접힌 상태 (작업 항목이 표시되는 경우) 간에 전환
표시됩니다.
작업 뷰가 포함된 작업 항목을 접을 수 있다고 선언하려면 메뉴의 XML 파일에 있는 <item>
요소의 android:showAsAction
속성에 “collapseActionView"
플래그를 포함합니다.
작업 뷰가 확장 및 축소 간에 전환될 때 콜백을 수신하려면
setOnActionExpandListener()
를 호출하여 각 MenuItem
가 있는 MenuItem.OnActionExpandListener
인스턴스를 반환합니다. 일반적으로 onCreateOptionsMenu()
콜백 중에 이 작업을 실행해야 합니다.
접을 수 있는 작업 뷰를 제어하려면 다음에서 collapseActionView()
및 expandActionView()
를 호출합니다.
각 MenuItem
를 반환합니다.
맞춤 작업 뷰를 만들 때는 새 CollapsibleActionView
인터페이스를 구현하여 뷰가 확장될 때 콜백을 수신할 수도 있습니다.
접혀 있습니다.
작업 모음의 기타 API
setHomeButtonEnabled()
를 사용하면 아이콘/로고가 홈 또는 '위로' 이동하는 버튼으로 동작하는지 여부 ('true'를 전달하여 버튼)setIcon()
및setLogo()
를 사용하면 런타임에 작업 모음 아이콘이나 로고를 정의할 수 있습니다.Fragment.setMenuVisibility()
에서 다음을 사용 설정할 수 있습니다. 프래그먼트가 선언한 옵션 메뉴 항목의 공개 상태를 비활성화하거나 비활성화합니다. 이는 프래그먼트가 활동에 추가되었지만 표시되지 않으므로 메뉴 항목은 다음과 같아야 합니다. 숨김 처리됨FragmentManager.invalidateOptionsMenu()
프래그먼트 수명 주기의 다양한 상태에서 활동 옵션 메뉴를 무효화할 수 있음 이 경우Activity
의 상응하는 메서드를 사용하지 못할 수 있습니다.
사용자 인터페이스 및 뷰
Android 4.0에는 다양한 새 뷰와 기타 UI 구성요소가 도입되었습니다.
GridLayout
GridLayout
는 하위 뷰를 직사각형으로 배치하는 새로운 뷰 그룹
그리드 TableLayout
와 달리 GridLayout
는 고정 평면을 사용합니다.
계층 구조를 제공하고 구조를 제공하기 위해 테이블 행과 같은 중간 뷰를 사용하지 않습니다.
대신 하위 요소가 차지해야 하는 행과 열을 지정합니다(셀은 여러 행에 걸쳐 있을 수 있음).
행 및/또는 열)을 포함하며, 기본적으로 그리드의 행과 열에 순차적으로 배치됩니다.
GridLayout
방향은 순차적 하위 요소가 다음에 해당하는지 여부를 결정합니다.
기본적으로 가로 또는 세로로 배치됩니다. 하위 요소 사이의 간격은
새 Space
뷰의 인스턴스 또는 관련 여백 매개변수를 설정하여
연구하고 있습니다.
ApiDemos를 참조하세요.
를 사용하세요.GridLayout
TextureView
TextureView
는 다음과 같은 콘텐츠 스트림을 표시할 수 있는 새로운 뷰입니다.
또는 OpenGL 장면으로 구현할 수 있습니다. SurfaceView
와 유사하지만 TextureView
는
다른 View
객체처럼 취급할 수 있습니다. 예를 들어
변환을 적용하거나 ViewPropertyAnimator
를 사용하여 애니메이션을 적용할 수 있습니다.
setAlpha()
로 불투명도를 조정합니다.
TextureView
는 하드웨어 가속 창에서만 작동합니다.
자세한 내용은 TextureView
문서를 참고하세요.
위젯 전환
새 Switch
위젯은 사용자가 하나로 드래그할 수 있는 두 상태 전환 버튼입니다.
또는 간단히 탭하여 두 상태 간에 옵션을 전환할 수 있습니다.
android:textOn
및 android:textOff
속성을 사용하여 텍스트를 지정할 수 있습니다.
켜짐 및 꺼짐 설정 시 스위치에 표시됩니다. 또한 android:text
속성도
스위치와 함께 라벨을 배치할 수 있습니다.
스위치를 사용하는 샘플은 switches.xml 레이아웃 파일을 참조하세요. 및 각 스위치 활동.
팝업 메뉴
Android 3.0에는 팝업으로 표시되는 짧은 컨텍스트 메뉴를 만들기 위한 PopupMenu
가 도입되었습니다.
지정한 앵커 지점에서 위로 (일반적으로 선택된 항목의 지점) Android 4.0은
다음과 같은 몇 가지 유용한 기능이 있는 PopupMenu
입니다.
- 이제
inflate()
를 사용하여 XML 메뉴 리소스에서 팝업 메뉴의 콘텐츠를 쉽게 확장하여 메뉴 리소스 ID에 전달할 수 있습니다. - 또한 이제
PopupMenu.OnDismissListener
콜백이 호출됩니다.
환경설정
새 TwoStatePreference
추상 클래스는
환경설정에서 두 가지 상태 선택 옵션을 제공합니다. 새 SwitchPreference
는 다음에서 Switch
위젯을 제공하는 TwoStatePreference
의 확장 프로그램입니다.
환경설정 보기를 사용하면 사용자가 추가 탭을 열지 않고도 설정을 켜거나 끌 수 있습니다.
환경설정 화면이나 대화상자를 표시합니다. 예를 들어 설정 애플리케이션은 Wi-Fi 및 블루투스 설정에 SwitchPreference
를 사용합니다.
시스템 테마
Android 4.0을 타겟팅하는 모든 애플리케이션의 기본 테마 (targetSdkVersion
또는
minSdkVersion
도착
“14"
이상)이 이제
'기기 기본값' 테마: Theme.DeviceDefault
다음과 같을 수 있습니다.
어두운 홀로 테마 또는 특정 기기에서 정의한 다른 어두운 테마
Theme.Holo
테마 모음은 변경되지 않습니다.
한 기기에서 다른 기기로 옮겨야 합니다. 명시적으로
Theme.Holo
테마 중 하나를 활동에 적용하면
이러한 테마는 같은 기기 내 다른 기기에서 캐릭터를 변경하지 않으므로 안심하세요.
플랫폼 버전입니다
앱이 전체 기기 테마와 섞이게 하고 싶은 경우 (예: 여러 OEM
시스템에 다른 기본 테마를 제공하는 경우 Theme.DeviceDefault
계열의 테마를 명시적으로 적용해야 합니다.
옵션 메뉴 버튼
Android 4.0부터는 핸드셋에 더 이상 메뉴 하드웨어 버튼이 필요하지 않습니다. 하지만 기존 애플리케이션이 옵션 메뉴를 제공하고 옵션이 있을 것으로 예상된다면 이에 대해 걱정할 필요가 없습니다. 메뉴 버튼 기존 앱이 예상대로 계속 작동하도록 하기 위해, 시스템은 이전 버전의 Android용으로 설계된 앱의 화면 메뉴 버튼입니다.
최상의 사용자 환경을 제공하려면 신규 앱과 업데이트된 앱에서 대신 ActionBar
를 사용하여 메뉴 항목에 대한 액세스를 제공하고 targetSdkVersion
를 다음과 같이 설정해야 합니다.
"14"
를 호출하여 최신 프레임워크 기본 동작을 활용할 수 있습니다.
시스템 UI 가시성 컨트롤
Android 초창기부터 시스템은 바는 핸드셋 기기 상단에 위치하며 이동통신사와 같은 정보를 전달합니다. 신호, 시간, 알림 등이 있습니다. Android 3.0에는 태블릿용 시스템 표시줄이 추가되었습니다. 이 기기는 시스템 탐색 컨트롤 (홈, 뒤로, 등) 및 상태 표시줄에서 제공되는 요소에 대한 인터페이스도 제공합니다. 포함 Android 4.0부터 시스템은 탐색 메뉴라는 새로운 유형의 시스템 UI를 제공합니다. 나 탐색 메뉴를 핸드셋 - 네비게이션 컨트롤 제공 시스템을 탐색할 수 있는 하드웨어가 없는 기기의 경우 시스템 표시줄의 알림 UI 및 설정 컨트롤 따라서 탐색 기능을 제공하는 기기는 상단에 상태 표시줄이 있습니다.
현재는 FLAG_FULLSCREEN
플래그를 사용하여 휴대전화의 상태 표시줄을 숨길 수 있습니다. Android 4.0에서 제어하는 API는
두 시스템 표시줄의 동작을 더 잘 반영하도록 시스템 표시줄의 가시성이 업데이트되었습니다.
탐색 메뉴:
SYSTEM_UI_FLAG_LOW_PROFILE
플래그가STATUS_BAR_HIDDEN
플래그를 대체합니다. 이 플래그를 설정하면 '로우 프로필'이 사용 설정됩니다. 시스템 표시줄 모드 또는 탐색 메뉴 탐색 버튼이 어두워지고 시스템 표시줄의 다른 요소도 숨겨집니다. 사용 설정 중 시스템 탐색을 방해하지 않고 몰입도 높은 게임을 만드는 데 유용합니다. 버튼을 클릭합니다.SYSTEM_UI_FLAG_VISIBLE
플래그는STATUS_BAR_VISIBLE
플래그를 대체하여 시스템 표시줄이나 탐색 메뉴가 표시되도록 요청합니다.SYSTEM_UI_FLAG_HIDE_NAVIGATION
는 탐색 메뉴가 완전히 숨겨집니다. 이 기능은 탐색 메뉴에서만 작동합니다. 일부 핸드셋에서 사용됩니다 (태블릿의 시스템 표시줄을 숨기지 않음). 탐색 bar는 시스템이 사용자 입력을 받는 즉시 보기로 돌아갑니다. 따라서 이 모드는 주로 동영상 재생 또는 전체 화면이 필요하지만 사용자 입력이 필요한 기타 경우에 사용합니다. 필요하지 않습니다.
활동의 뷰에서 setSystemUiVisibility()
를 호출하여 시스템 표시줄과 탐색 메뉴에 이러한 각 플래그를 설정할 수 있습니다. 이
창 관리자는 창에 있는 모든 뷰의 모든 플래그를 결합 (OR)하여
창에 입력 포커스가 있는 한 시스템 UI에 적용합니다. 기간 입력이 사라지는 경우
포커스 (사용자가 앱에서 벗어나거나 대화상자가 표시됨)를 수행하면 플래그가 효력을 발휘하지 않습니다.
마찬가지로 뷰 계층 구조에서 이러한 뷰를 제거하면 플래그가 더 이상 적용되지 않습니다.
액티비티의 다른 이벤트를 시스템 UI의 가시성 변경과 동기화(
예를 들어 시스템 UI가 숨겨질 때 작업 모음이나 다른 UI 컨트롤을 숨기는 경우)를 추가하려면
공개 상태가 되면 알림을 받도록 View.OnSystemUiVisibilityChangeListener
시스템 표시줄이나 탐색 메뉴가
변경되는 것을 볼 수 있습니다
OverscanActivity 클래스를 참조하세요.
입력 프레임워크
Android 4.0은 커서 마우스 오버 이벤트 및 새로운 스타일러스 및 마우스 버튼 이벤트에 대한 지원을 추가합니다.
마우스 오버 이벤트
이제 View
클래스에서 '마우스 오버'를 지원합니다. 더욱 풍부한 상호작용을 가능하게 하여
포인터 기기 (예: 마우스 또는 화면 화면을 구동하는 기타 기기)를 통해
합니다.
뷰에서 마우스 오버 이벤트를 수신하려면 View.OnHoverListener
를 구현하고
setOnHoverListener()
에 등록합니다. 마우스를 가져가면
이벤트가 발생하면 리스너는 onHover()
호출을 수신하고 View
이벤트 및 마우스 오버 이벤트의 유형을 설명하는 MotionEvent
를 수신함
확인할 수 있습니다 마우스 오버 이벤트는 다음 중 하나일 수 있습니다.
View.OnHoverListener
는 마우스 오버 이벤트를 처리하는 경우 onHover()
에서 true를 반환해야 합니다. 만약
리스너가 false를 반환하면 마우스 오버 이벤트가 평소처럼 상위 뷰로 전달됩니다.
애플리케이션이
이제 상태 목록 드로어블에서 android:state_hovered
속성을 사용하여
커서가 뷰 위에 있을 때 다른 배경 드로어블을 제공합니다.
새 마우스 오버 이벤트에 관한 데모는 아래의 Hover 클래스를 참고하세요. ApiDemos를 참조하세요.
스타일러스 및 마우스 버튼 이벤트
Android는 이제 디지타이저와 같은 스타일러스 입력 장치로부터 입력을 수신하는 API를 제공합니다. 태블릿 주변기기 또는 스타일러스 지원 터치스크린
스타일러스 입력은 터치 또는 마우스 입력과 유사한 방식으로 작동합니다. 스타일러스가 접촉할 때 디지타이저를 사용하면 애플리케이션이 손가락이 키보드의 버튼을 조작할 때와 마찬가지로 터치 이벤트를 수신할 수 있습니다. 디스플레이를 터치합니다. 스타일러스가 디지타이저 위에 있으면 애플리케이션에서 마우스 오버를 버튼이 없을 때 디스플레이에서 마우스 포인터를 이동할 때와 같은 이벤트 를 누릅니다.
애플리케이션은
'도구 유형' getToolType()
를 사용하여 MotionEvent
의 각 포인터와 연결됩니다. 현재 정의된 도구 유형은 TOOL_TYPE_UNKNOWN
, TOOL_TYPE_FINGER
,
TOOL_TYPE_MOUSE
, TOOL_TYPE_STYLUS
,
및 TOOL_TYPE_ERASER
도구 유형을 쿼리하면 애플리케이션이
손가락 또는 마우스 입력과 다른 방식으로 스타일러스 입력을 처리할 수 있습니다.
또한 애플리케이션은 'button'
상태' getButtonState()
를 사용하여 MotionEvent
를 생성합니다. 현재 정의된 버튼 상태는 BUTTON_PRIMARY
, BUTTON_SECONDARY
, BUTTON_TERTIARY
, BUTTON_BACK
, BUTTON_FORWARD
입니다. 편의를 위해 뒤로 및 앞으로 마우스 버튼은
KEYCODE_BACK
및 KEYCODE_FORWARD
키에 자동으로 매핑됩니다. 애플리케이션은 이러한 키를 처리하여
뒤로 및 앞으로 탐색에 기반한 마우스 버튼
접촉의 위치와 압력을 정밀하게 측정하는 것 외에도 일부 스타일러스 입력은
또한 스타일러스 팁과 디지타이저 사이의 거리, 스타일러스 기울기 각도도 보고합니다.
스타일러스 방향 각도가 포함됩니다. 애플리케이션은 축 코드 AXIS_DISTANCE
, AXIS_TILT
, AXIS_ORIENTATION
와 함께 getAxisValue()
를 사용하여 이 정보를 쿼리할 수 있습니다.
도구 유형, 버튼 상태 및 새 축 코드에 대한 설명은 TouchPaint를 참고하세요. 클래스를 사용합니다.
속성
새 Property
클래스는 빠르고 효율적이며 쉬운 방법으로
속성을 사용하면 호출자가 타겟 객체에 대해 일반적으로 값을 설정하거나 가져올 수 있습니다. 또한
필드/메서드 참조를 전달하는 기능이 허용되며 코드가 값을 설정하거나 가져올 수 있음
필드/메서드가 무엇인지에 관한 세부정보를 모르더라도 속성의 문제를 해결할 수 있습니다.
예를 들어 foo
객체에 bar
필드의 값을 설정하려면 다음을 수행합니다.
다음 작업을 수행했습니다.
Kotlin
foo.bar = value
자바
foo.bar = value;
기본 비공개 필드 bar
의 setter를 호출하려면 이전에 다음과 같이 했습니다.
수행:
Kotlin
foo.setBar(value)
자바
foo.setBar(value);
그러나 foo
인스턴스를 전달하고 다른 코드를 사용하도록 하려면
bar
값이 포함된 경우 Android 4.0 전에는 실제로 이 작업을 수행할 수 없습니다.
Property
클래스를 사용하여 Property
을 선언할 수 있습니다.
클래스 Foo
의 BAR
객체foo
클래스 Foo
:
Kotlin
BAR.set(foo, value)
자바
BAR.set(foo, value);
이제 View
클래스는 Property
클래스를 활용하여
를 사용하면 Android 3.0 (ROTATION
, ROTATION_X
, TRANSLATION_X
등)에 추가된 변환 속성과 같은 다양한 필드를 설정할 수 있습니다.
ObjectAnimator
클래스도 Property
를 사용합니다.
클래스를 제공하므로 Property
로 ObjectAnimator
를 만들 수 있습니다. 문자열 기반 클래스보다 더 빠르고 효율적이며 유형 안전성이 더 높습니다.
접근하는 것입니다.
하드웨어 가속
Android 4.0부터는
애플리케이션에서 targetSdkVersion
또는
minSdkVersion
도착
“14"
이상 하드웨어 가속을 사용하면 일반적으로 애니메이션이 더 매끄럽고
사용자 상호작용에 대한 전반적인 성능 및 반응이 개선됩니다.
필요한 경우 hardwareAccelerated
를 사용하여 하드웨어 가속을 수동으로 사용 중지할 수 있습니다.
개별 <activity>
요소 또는 <application>
의 속성
요소가 포함됩니다. 또는 setLayerType(LAYER_TYPE_SOFTWARE)
를 호출하여 개별 뷰의 하드웨어 가속을 사용 중지할 수 있습니다.
지원되지 않는 그림 목록 등 하드웨어 가속에 관한 자세한 내용 자세한 내용은 하드웨어 Acceleration 문서를 참조하세요.
JNI 변경사항
이전 버전의 Android에서는 JNI 로컬 참조가 간접 핸들이 아니었습니다. 사용한 Android 직접 포인터입니다. 가비지 컬렉터가 객체를 움직이지 않는 한 문제가 되지 않았지만 버그가 있는 코드를 작성할 수 있었기 때문에 작동하는 것으로 보였습니다. Android 4.0에서 시스템은 이제 간접적으로 참조하도록 해야 합니다.
JNI 로컬 참조에 관한 자세한 내용은 '로컬 및 전역 참조'에 설명되어 있습니다. 자세한 내용은 JNI 도움말을 참조하세요. Android 4.0에서는 CheckJNI는 이러한 오류를 감지하도록 개선되었습니다. Android 개발자 블로그에서 예정된 게시물을 확인하세요. JNI 참조의 일반적인 오류와 해결 방법을 알아보세요.
이러한 JNI 구현 변경은 다음 중 하나를 설정하여 Android 4.0을 타겟팅하는 앱에만 영향을 미칩니다.
targetSdkVersion
또는 minSdkVersion
를 “14"
이상으로 설정해야 합니다. 이러한 속성을 더 낮은 값으로 설정했다면
JNI 로컬 참조는 이전 버전과 동일하게 작동합니다.
WebKit
- WebKit이 버전 534.30으로 업데이트됨
- 인도어 글꼴 (데바나가리, 벵골어, 타밀어, 복잡한 문자 지원 포함) 지원
문자를 결합하는 데 필요한
WebView
코드 및 기본 제공 브라우저 WebView
및 내장 브라우저- WebDriver 지원을 통해
WebView
를 사용하는 앱을 더 쉽게 테스트할 수 있습니다.
Android 브라우저
브라우저 애플리케이션은 웹 애플리케이션을 지원하기 위해 다음 기능을 추가합니다.
- 더 빠른 성능을 위해 V8 JavaScript 컴파일러 업데이트
- Android에서 이전된 기타 주목할 만한 개선사항
3.0 버전을 이제 핸드셋에서 사용할 수 있습니다.
<ph type="x-smartling-placeholder">
- </ph>
- 모든 페이지에서 고정 위치 요소 지원
- HTML 미디어 캡처
- 기기 방향 이벤트
- CSS 3D 변환
권한
새로운 권한은 다음과 같습니다.
ADD_VOICEMAIL
: 음성사서함 서비스에서 음성사서함을 추가하도록 허용 메시지를 기기에 보냅니다.BIND_TEXT_SERVICE
:SpellCheckerService
를 구현하는 서비스는 이 권한을 자체적으로 요구해야 합니다.BIND_VPN_SERVICE
:VpnService
를 구현하는 서비스는 이 권한을 자체적으로 요구해야 합니다.- android.Manifest.permission#READ_PROFILE:
ContactsContract.Profile
제공자에 관한 읽기 액세스 권한을 제공합니다. - android.Manifest.permission#WRITE_PROFILE:
ContactsContract.Profile
제공자에 관한 쓰기 액세스 권한을 제공합니다.
기기 기능
새로운 기기의 기능은 다음과 같습니다.
FEATURE_WIFI_DIRECT
: 애플리케이션이 사용 P2P 통신을 위한 Wi-Fi
Android 4.0 (API 수준)의 모든 API 변경사항을 자세히 보려면 API 차이점 보고서를 참조하세요.
이전 API
위의 모든 것 외에도 Android 4.0은 이전 릴리스의 모든 API를 자연스럽게 지원합니다. Android 3.x 플랫폼은 대형 화면 기기에만 사용할 수 있으므로 주로 핸드셋용으로 개발해 온 개발자라면, Android에 추가된 모든 API를 모를 수도 있습니다. 살펴봤습니다
놓쳤을 수도 있는 주목할 만한 API 중 현재 제공되는 몇 가지 API를 살펴보겠습니다. 할 수 있습니다.
- Android 3.0
-
Fragment
: 고유한 API를 구별할 수 있도록 하는 프레임워크 구성요소입니다. 활동 요소를 자체 UI 및 수명 주기를 정의하는 독립 실행형 모듈로 변환합니다. 자세한 내용은 프래그먼트 개발자 가이드를 참조하세요.ActionBar
: 상단의 기존 제목 표시줄을 대체합니다. 표시됩니다. 왼쪽 모서리에 애플리케이션 로고가 있고 메뉴 항목을 위한 인터페이스입니다. 자세한 내용은 작업 모음 개발자 가이드Loader
: 비동기식을 용이하게 하는 프레임워크 구성요소입니다. 데이터를 로드하여 UI 구성요소를 차단하지 않고 동적으로 데이터를 로드하면 기본 스레드로 이동합니다. 자세한 내용은 로더 개발자 가이드를 참조하세요.- 시스템 클립보드: 애플리케이션이 단순히 텍스트 이외의 데이터를 복사하여 붙여넣을 수 있습니다. 복사해 넣을 수 있습니다. 잘린 데이터는 일반 텍스트, URI 또는 인텐트일 수 있습니다. 자세한 내용은 복사하여 붙여넣기 개발자 가이드입니다.
- 드래그 앤 드롭: 드래그 앤 드롭을 용이하게 하는 뷰 프레임워크에 내장된 API 세트 작업을 수행할 수 있습니다 자세한 내용은 드래그 앤 드롭 개발자 가이드
- 새롭고 유연한 애니메이션 프레임워크를 사용하면 객체 (View, Drawable, Fragment, Object, 또는 기타 항목)를 정의하고, 애니메이션 측면을 정의하고, 지정할 수도 있습니다. Android에서 애니메이션을 만드는 새 프레임워크 더욱 간편해졌습니다. 자세한 내용은 속성 애니메이션 개발자 참조하세요.
- RenderScript 그래픽 및 Compute Engine: RenderScript는 고성능 3D를 제공합니다. 개발자가 C (C99 표준)로 작성하는 네이티브 수준에서 그래픽 렌더링 및 컴퓨팅 API를 제공하며, 이식성을 유지하면서 네이티브 환경에서 기대하는 성능 유형 제공 실행할 수 있습니다 자세한 내용은 RenderScript 개발자 참조하세요.
- 하드웨어 가속 2D 그래픽: 이제 기본 그래픽에 OpenGL 렌더기를 사용하도록
매니페스트 요소의
<application>
에서 {android:hardwareAccelerated="true"}를 설정하여 애플리케이션 생성 요소 또는 개별<activity>
요소 결과 부드러운 애니메이션, 부드러운 스크롤, 전반적으로 개선된 사용자 성능 및 응답 상호작용하지 않습니다.참고: 애플리케이션의
minSdkVersion
또는targetSdkVersion
를"14"
이상 버전에서는 하드웨어 가속이 기본적으로 사용 설정됩니다. - 그 외 다양한 기능 Android 3.0 플랫폼을 참조하세요. 참조하세요.
- Android 3.1
-
- USB API: 연결된 주변기기와 애플리케이션을 통합하기 위한 강력한 새 API Android 애플리케이션 API는 USB 스택 및 USB 호스트 및 장치 상호 작용에 대한 지원을 포함하여 플랫폼에 내장되어 있습니다. USB 호스트 및 액세서리 개발자 가이드를 참고하세요.
- MTP/PTP API: 애플리케이션이 연결된 카메라 및 다른 PTP와 직접 상호작용할 수 있습니다.
기기가 연결되거나 제거될 때 알림을 받고, 기기의 파일과 저장용량을 관리
이러한 장치 간에 파일과 메타데이터를 전송할 수 있습니다. MTP API는 PTP를 구현함
MTP(미디어 전송 프로토콜) 사양의 하위 집합입니다. 자세한 내용은
android.mtp
문서를 참조하세요. - RTP API: Android는 내장된 RTP (실시간 전송 프로토콜) 스택에 API를 노출합니다.
주문형 또는 대화형 데이터 스트리밍을 관리하는 데 사용할 수 있는 애플리케이션 특히 앱이
VoIP, 눌러서 대화, 회의, 오디오 스트리밍을 제공하는 업체는 API를 사용하여
사용 가능한 네트워크를 통해 데이터 스트림을 송수신하는 데 사용됩니다.
android.net.rtp
문서를 참고하세요. - 조이스틱 및 기타 일반 모션 입력을 지원합니다.
- Android 3.1 플랫폼을 참조하세요. 참고 자료를 참조하세요.
- Android 3.2
-
- 새로운 화면은 애플리케이션이 작동하는 방식을 더 잘 제어할 수 있는 API를 지원합니다. 여러 화면 크기에 걸쳐 표시됩니다. API는 기존 화면 지원 모델을 측정 기준, 크기별로 특정 화면 크기 범위를 정확하게 밀도 독립형 픽셀 단위 (예: 너비 600dp 또는 720dp)로 화면 크기 (예: 대형 또는 특대형) 예를 들어 이것은 5"와 "7" 사이의 7인치 디스플레이 일반적으로 이 둘 다 '대형' 사용할 수 있습니다. 블로그 게시물()을 참조하세요. 새로운 화면 크기 관리를 위한 도구를 참조하세요.
<uses-feature>
의 새로운 상수 가로 또는 세로 화면 방향 요구사항을 선언해야 합니다.- 기기 '화면 크기' 이제 화면 방향 중에 구성이 변경됩니다.
있습니다. 앱이 API 수준 13 이상을 타겟팅하는 경우
"screenSize"
"orientation"
구성 변경도 처리하려는 경우 구성 변경을 수행해야 합니다. 자세한 내용은android:configChanges
를 참고하세요. - Android 3.2 플랫폼을 참조하세요. 참고하시기 바랍니다.
API 수준
Android 4.0 API에는 정수가 할당됨 시스템 자체에 저장된 식별자(14)가 포함됩니다. 'API 레벨'이라고 하는 이 식별자를 사용하면 확인해야 합니다.
Android 4.0에 도입된 API를 애플리케이션에서 사용하려면
애플리케이션을 대상으로 하는 API 수준 14 또는
더 높습니다. 필요에 따라
android:minSdkVersion="14"
속성을
<uses-sdk>
요소가 포함됩니다.
자세한 내용은 API란? 레벨?