Android 4.1 API

API 수준: 16

Android 4.1 (JELLY_BEAN) 개선된 기능을 제공하는 플랫폼의 한 단계인 사용자 환경을 개선할 수 있습니다. 사용자와 앱을 위한 새로운 기능 추가 있습니다. 이 문서에서는 Google Cloud Platform을 구성하는 유용한 새 API를 제공합니다.

앱 개발자는 다음에서 Android 4.1을 사용할 수 있습니다. 시스템 이미지로 SDK Manager를 Android Emulator 및 앱을 빌드할 수 있는 SDK 플랫폼에서 실행됩니다. 해야 할 일 최대한 빨리 시스템 이미지와 플랫폼을 다운로드하여 앱을 다운로드할 수 있습니다.

Android 4.1을 실행하는 기기에 대해 앱을 더 잘 최적화하려면, targetSdkVersion를 다음과 같이 설정해야 합니다. "16"를 Android 4.1 시스템 이미지에 설치합니다. 테스트한 후 이 변경사항이 적용된 업데이트를 게시해야 합니다.

나 는 Android 4.1에서 API를 사용하는 동시에 실행하기 전에 시스템 API 수준을 확인하는 코드에 대한 조건 minSdkVersion에서 지원되지 않는 API 자세히 알아보려면 이전 버전과의 호환성 유지를 위해 이전 버전과 호환되는 버전 만들기 UI를 참조하세요.

API 수준의 작동 방식에 대한 자세한 내용은 API란 무엇인가요? 레벨?

앱 구성요소

격리된 서비스

android:isolatedProcess="true"<service> 태그를 사용하면 Service이(가) 다음 위치에서 실행됩니다. 자체적인 권한이 없는 격리된 사용자 ID 프로세스를 사용할 수 있습니다.

메모리 관리

TRIM_MEMORY_RUNNING_LOWTRIM_MEMORY_RUNNING_CRITICAL와 같은 새로운 ComponentCallbacks2 상수가 포그라운드를 제공합니다. 더 많은 정보를 처리하여 메모리 상태를 onLowMemory() 호출하기 전에 표현해야 합니다.

새로운 getMyMemoryState(ActivityManager.RunningAppProcessInfo) 메서드를 사용하면 다음을 할 수 있습니다. 일반 메모리 상태를 검색할 수 있습니다

콘텐츠 제공자

새로운 메서드 acquireUnstableContentProviderClient()를 사용하면 '불안정'할 수 있는 ContentProviderClient에 액세스할 수 있습니다. 앱이 비정상 종료되지 않도록 합니다. 이 기능은 별도의 환경에서 콘텐츠 제공자와 상호작용할 때 있습니다.

라이브 배경화면

라이브 배경화면 미리보기 활동을 직접 시작하는 새로운 인텐트 프로토콜 사용자가 나가지 않고도 라이브 배경화면을 쉽게 선택할 수 있습니다. 홈 배경화면 선택 도구를 탐색합니다.

라이브 배경화면 선택 도구를 실행하려면 다음을 사용하여 IntentstartActivity()를 호출합니다. ACTION_CHANGE_LIVE_WALLPAPER 외 - 라이브 배경화면 ComponentNameEXTRA_LIVE_WALLPAPER_COMPONENT의 문자열로 지정합니다.

앱 스택 탐색

Android 4.1에서는 위로 탐색을 위한 적절한 디자인 패턴을 훨씬 더 쉽게 구현할 수 있습니다. 다음과 같이 각 <activity> 요소에 android:parentActivityName를 추가하기만 하면 됩니다. 매니페스트 파일에 포함됩니다 시스템은 이 정보를 사용하여 사용자가 활동을 시작할 때 적절한 활동을 엽니다 작업 모음에서 위로 버튼을 누릅니다 (현재 활동을 종료함). 따라서 각 활동의 android:parentActivityName를 선언하므로 클릭을 처리하는 데 onOptionsItemSelected() 메서드가 필요하지 않습니다. 이벤트를 발생시킵니다. 이제 시스템이 해당 이벤트를 처리하고 적절한 활동을 만듭니다.

이 기능은 사용자가 앱의 활동 중 하나를 시작하는 시나리오에서 특히 유용합니다. '심층 분석'을 통해 인텐트(예: 알림에서 가져온 인텐트 또는 앱 간 이동에 관한 디자인 가이드에 설명된 대로 다를 수 있습니다. 날짜 사용자가 이런 식으로 활동을 시작하는 경우 앱에 자연스럽게 백 스택이 없을 수도 있고 사용자가 위로 이동할 때 재개할 수 있는 활동 그러나 활동에 android:parentActivityName 속성을 제공하면 시스템은 앱에 이미 상위 활동의 백 스택이 포함되어 있는지 여부 및 포함되지 않은 경우 모든 상위 활동이 포함된 합성 백 스택

참고: 사용자가 앱에서 심층 활동을 시작하고 앱에 새 작업을 생성하고 시스템은 실제로 상위 활동 스택을 삽입합니다. 할 수 있습니다. 따라서 뒤로 버튼을 누르면 상위 항목 스택을 통해 있습니다.

시스템에서 앱의 합성 백 스택을 만들면 기본 Intent를 빌드하여 각 상위 활동의 새 인스턴스를 만듭니다. 따라서 사용자가 자연스럽게 탐색했을 때 예상되는 방식으로 상위 활동의 저장된 상태를 처리합니다. ~ 확인할 수 있습니다 일반적으로 상위 활동이 사용자의 컨텍스트가 있으면 해당 컨텍스트 정보가 누락되므로 사용자 스택을 다시 탐색합니다. 예를 들어 사용자가 앨범을 보고 있는 경우 음악 앱에서 위로 이동하면 선택한 앨범의 모든 앨범을 나열하는 활동으로 이동할 수 있습니다. 음악 장르입니다. 이 경우 스택을 생성해야 하는 경우 활동. 상위 요소가 올바른 목록을 표시할 수 있도록 현재 앨범이 속한 장르 알 수 있습니다. AI로 생성된 상위 요소에 이러한 정보를 전달하기 위해 onPrepareNavigateUpTaskStack() 메서드를 재정의해야 합니다. 이 TaskStackBuilder 객체를 제공합니다. 합성해야 합니다. TaskStackBuilder에는 시스템에서 각 상위 활동을 만드는 데 사용하는 Intent 객체가 포함되어 있습니다. onPrepareNavigateUpTaskStack() 구현을 구현했다면 적절한 Intent를 수정하여 상위 활동이 적절한 컨텍스트를 결정하고 표시하는 데 사용할 수 있는 추가 데이터를 추가합니다. 적절한 UI를 제공합니다.

시스템은 TaskStackBuilder를 만들 때 논리 클래스에 상위 활동을 만드는 데 사용되는 Intent 객체를 추가합니다. 활동 트리의 맨 위부터 시작하는 것입니다. 따라서 내부 배열에 추가된 마지막 Intent는 현재 활동의 직접적인 상위 요소입니다. 만약 활동의 상위 요소에 관한 Intent를 수정하려면 먼저 getIntentCount()로 배열의 길이를 생성하고 이를 전달합니다. 값을 editIntentAt()로 설정합니다.

앱 구조가 더 복잡한 경우 다른 API도 몇 가지 있습니다. 이를 통해 위로 탐색 기능과 합성 백 스택을 완전히 맞춤설정할 수 있습니다. 추가 기능을 제공하는 일부 API는 다음과 같습니다.

onNavigateUp()
사용자가 위로 버튼을 누를 때 맞춤 작업을 실행하도록 재정의를 재정의합니다.
navigateUpTo(Intent)
현재 활동을 종료하고 Intent를 제공했습니다. 활동이 백 스택에 있지만 가 가장 가까운 상위 요소가 아닌 경우 현재 활동과 함께 종료됩니다.
getParentActivityIntent()
논리 연산을 시작하는 Intent를 가져오려면 이 메서드를 호출합니다. 현재 활동의 상위 요소입니다.
shouldUpRecreateTask(Intent)
탐색을 위해 합성 백 스택을 만들어야 하는지 여부를 쿼리하려면 이 메서드를 호출합니다. 있습니다. 합성 스택을 생성해야 하는 경우 true를 반환하고 적절한 스택을 생성해야 하면 false를 반환합니다. 이미 존재하는 이름입니다.
finishAffinity()
현재 활동과 동일한 것으로 모든 상위 활동을 마치려면 이 메서드를 호출합니다. 현재 활동에 연결된 작업 어피니티입니다. 기본 동작을 재정의하면 onNavigateUp()로, 다음 메서드를 호출할 때 이 메서드를 호출해야 합니다. 위로 탐색 시 합성 백 스택을 만듭니다.
onCreateNavigateUpTaskStack
합성 작업 스택이 생성되는 방식을 완전히 제어해야 하는 경우 이를 재정의합니다. 백 스택의 인텐트에 일부 데이터를 추가하기만 하면 onPrepareNavigateUpTaskStack()를 재정의해야 합니다.

그러나 대부분의 앱은 이러한 API를 사용하거나 onPrepareNavigateUpTaskStack()를 구현할 필요가 없지만, 각 <activity> 요소에 android:parentActivityName 추가

멀티미디어

미디어 코덱

MediaCodec 클래스는 인코딩을 위한 하위 수준 미디어 코덱에 대한 액세스를 제공합니다. 디코딩하는 과정입니다. createEncoderByType()를 호출하여 미디어를 인코딩하거나 createDecoderByType()를 호출하여 미디어를 디코딩하여 MediaCodec를 인스턴스화할 수 있습니다. 이러한 각 메서드는 인코딩하거나 디코딩하려는 미디어 유형의 MIME 유형(예: "video/3gpp" 또는 "audio/vorbis")을 사용합니다.

MediaCodec 인스턴스를 만들면 configure()를 호출하여 미디어 형식이나 콘텐츠 암호화 여부입니다.

미디어를 인코딩하든 디코딩하든 상관없이 MediaCodec를 만듭니다. 먼저 getInputBuffers()를 호출하여 입력 ByteBuffer의 배열을 가져옵니다. 객체와 getOutputBuffers()를 사용하여 출력 ByteBuffer 객체의 배열을 가져옵니다.

인코딩 또는 디코딩할 준비가 되면 dequeueInputBuffer()를 호출하여 소스를 피드하는 데 사용해야 하는 ByteBuffer의 색인 위치 (입력 버퍼 배열에서)를 가져옵니다. 있습니다. 소스 미디어로 ByteBuffer를 채우고 나면 소유권을 해제합니다. queueInputBuffer()를 호출하여 버퍼의 상태를 변경할 수 있습니다.

출력 버퍼의 경우에도 마찬가지로 dequeueOutputBuffer()를 호출하여 ByteBuffer의 색인 위치를 가져옵니다. 결과를 받게 됩니다 ByteBuffer의 출력을 읽고 나면 releaseOutputBuffer()를 호출하여 소유권을 해제합니다.

queueSecureInputBuffer()를 다음과 함께 호출하여 코덱에서 암호화된 미디어 데이터를 처리할 수 있습니다. MediaCrypto API를 사용하여 일반적인 queueInputBuffer() API에 액세스할 수 있습니다.

코덱을 사용하는 방법에 관한 자세한 내용은 MediaCodec 문서를 참고하세요.

큐에서 오디오 녹음

새 메서드 startRecording()을 사용하면 MediaSyncEvent로 정의된 큐를 기반으로 오디오 녹음을 시작할 수 있습니다. MediaSyncEvent는 오디오 세션을 지정합니다. (예: MediaPlayer에 의해 정의된 함수) 완료 시 다음 트리거가 트리거됩니다. 녹음을 시작합니다. 예를 들어 이 기능을 사용하여 녹음 세션의 시작을 나타내는 오디오 톤 재생 자동으로 시작되므로 톤과 시작 부분을 수동으로 동기화할 필요가 없습니다. 있습니다.

시간 제한이 있는 텍스트 트랙

이제 MediaPlayer가 대역 내 및 대역 외 텍스트 트랙을 모두 처리합니다. 대역 내 텍스트 트랙은 MP4 또는 3GPP 미디어 소스 내에서 텍스트 트랙으로 제공됩니다. 대역 외 텍스트 트랙은 addTimedTextSource() 메서드를 통해 외부 텍스트 소스로 추가할 수 있습니다. 모든 외부 텍스트 뒤에 트랙 소스가 추가되면 getTrackInfo()를 호출하여 데이터 소스에서 사용 가능한 모든 트랙의 새로고침된 목록

MediaPlayer와 함께 사용할 트랙을 설정하려면 다음을 실행해야 합니다. 색인을 사용하여 selectTrack() 호출 위치를 선택합니다.

텍스트 트랙을 재생할 준비가 되었을 때 알림을 받으려면 MediaPlayer.OnTimedTextListener 인터페이스 및 패스 setOnTimedTextListener()로 전송합니다.

오디오 효과

이제 AudioEffect 클래스가 추가 오디오를 지원합니다. 다음과 같은 전처리 유형이 있습니다.

  • AEC (Acoustic Echo Canceler) 및 AcousticEchoCanceler 캡처된 오디오 신호에서 원격 당사자로부터 수신한 신호의 기여도를 삭제합니다.
  • AutomaticGainControl를 통한 입력 신호량 자동 조절 (AGC) 캡처된 신호의 출력을 자동으로 정규화합니다
  • 노이즈 제거기(NS)(NoiseSuppressor 지원) 캡처된 신호에서 배경 소음을 제거합니다.

AudioEffect 중 하나를 사용하여 AudioRecord로 캡처한 오디오에 이러한 전처리기 효과를 적용할 수 있습니다. 하위 클래스와 일치합니다.

참고: 모든 기기가 이러한 기능을 지원한다는 보장은 없습니다. 효과하므로 항상 먼저 상응하는 속성에서 isAvailable()를 호출하여 사용 가능 여부를 확인해야 합니다. 오디오 효과 클래스입니다.

끊김 없는 재생

이제 두 개의 개별 기기 간에 끊김 없이 재생을 MediaPlayer 객체. 첫 번째 MediaPlayer이(가) 종료되기 전에 언제든지 setNextMediaPlayer() 및 Android 호출 첫 번째 플레이어가 멈추는 순간 두 번째 플레이어를 시작하려고 합니다.

미디어 라우터 MediaRouter, MediaRouteActionProvider, MediaRouteButton이 제공하는 새로운 API 미디어 재생 위치를 선택하는 표준 메커니즘과 UI가 포함됩니다.

카메라

자동 초점 이동

새 인터페이스 Camera.AutoFocusMoveCallback를 사용하면 를 사용합니다. setAutoFocusMoveCallback()로 인터페이스를 등록할 수 있습니다. 그런 다음 카메라가 연속 자동 초점 모드 (FOCUS_MODE_CONTINUOUS_VIDEO 또는 FOCUS_MODE_CONTINUOUS_PICTURE번)을 통해 전화가 옵니다. 받는 사람: onAutoFocusMoving(), 자동 초점이 움직이기 시작했는지 또는 움직임이 멈췄는지 알려줍니다.

카메라 소리

MediaActionSound 클래스는 간단한 API 집합을 제공하여 카메라나 기타 미디어 작업에 의해 들리는 일반적인 소리입니다. 이러한 API를 사용하여 적절한 사운드를 사용해야 합니다.

소리를 재생하려면 MediaActionSound 객체를 인스턴스화하기만 하면 됩니다. load()를 설정하여 원하는 사운드를 미리 로드한 다음 시간이 되면 play()를 호출합니다.

연결

Android Beam

이제 Android BeamTM은 블루투스를 통한 대규모 페이로드 전송을 지원합니다. 데이터를 정의할 때 새 setBeamPushUris() 메서드 또는 새 콜백 인터페이스 NfcAdapter.CreateBeamUrisCallback(Android) 데이터 전송을 블루투스로 넘기거나 다른 대체 전송 방식을 더 빠른 전송 속도를 달성할 수 있습니다. 이는 특히 이미지 및 포드와 같은 대규모 페이로드에 페어링할 필요가 없으며 기기 간에 페어링할 필요가 없습니다. 추가 작업이 필요하지 않습니다. 블루투스를 통한 전송을 활용하도록 해야 합니다.

setBeamPushUris() 메서드는 앱에서 전송할 데이터를 지정하는 Uri 객체입니다. 또는 NfcAdapter.CreateBeamUrisCallback를 구현할 수 있습니다. 인터페이스이며, setBeamPushUrisCallback()를 호출하여 활동에 지정할 수 있습니다.

콜백 인터페이스, 호출 시 시스템은 인터페이스의 createBeamUris() 메서드를 호출합니다. 사용자가 Android Beam을 사용하여 공유를 실행하므로 공유 시 공유할 URI를 정의할 수 있습니다. 이는 공유할 URI가 setBeamPushUris()를 호출하는 것은 공유할 URI가 변경되지 않는 경우에 유용하며 미리 안전하게 정의할 수 있습니다.

네트워크 서비스 검색

Android 4.1은 멀티캐스트 DNS 기반 서비스 검색 지원을 추가하여 Wi-Fi를 통해 피어 기기에서 제공하는 서비스(예: 휴대기기, 프린터, 카메라, 미디어 플레이어 및 기타 로컬 네트워크에 등록됩니다.

새 패키지 android.net.nsd에는 로컬 네트워크에서 서비스를 브로드캐스트하고 네트워크에서 로컬 장치를 검색하며 장치에 연결하는 것입니다.

서비스를 등록하려면 먼저 NsdServiceInfo를 만들어야 합니다. 객체를 만들고, 다음과 같은 메서드로 서비스의 다양한 속성을 정의할 수 있습니다. setServiceName(), setServiceType()setPort()입니다.

그런 다음 NsdManager.RegistrationListener를 구현해야 합니다. 그런 다음 registerService()에 전달합니다. NsdServiceInfo으로 전화하세요.

네트워크에서 서비스를 검색하려면 NsdManager.DiscoveryListener를 구현하여 discoverServices()에 전달합니다.

NsdManager.DiscoveryListener에서 서비스 콜백을 수신하는 경우 서비스가 발견되면 resolveService(), 다음을 수신하는 NsdManager.ResolveListener의 구현 다음에 대한 정보가 포함된 NsdServiceInfo 객체입니다. 서비스를 제공하여 연결을 시작할 수 있습니다

Wi-Fi P2P 서비스 검색

Wi-Fi P2P API는 Android 4.1에서 개선되어 WifiP2pManager 이렇게 하면 주변 장소를 찾고 필터링할 수 있습니다. 네트워크 서비스는 Wi-Fi P2P에 연결하기 전에 검색을 사용하면 기존의 연결된 네트워크 (예: 로컬 Wi-Fi)에서 서비스를 검색할 수 있습니다. 네트워크).

다른 기기에서 발견할 수 있도록 Wi-Fi를 통해 앱을 서비스로 브로드캐스트하기 위해 연결하려면 addLocalService()를 호출하세요. 앱 서비스를 설명하는 WifiP2pServiceInfo 객체입니다.

Wi-Fi를 통해 근처 기기 검색을 시작하려면 먼저 Bonjour 또는 Upnp를 사용하여 통신합니다. Bonjour를 사용하려면 먼저 setDnsSdResponseListeners(): WifiP2pManager.DnsSdServiceResponseListenerWifiP2pManager.DnsSdTxtRecordListener를 모두 사용합니다. Upnp를 사용하려면 다음을 호출합니다. setUpnpServiceResponseListener(): WifiP2pManager.UpnpServiceResponseListener를 사용합니다.

로컬 기기에서 서비스를 검색하려면 먼저 addServiceRequest()를 호출해야 합니다. 이 메서드에 전달하는 WifiP2pManager.ActionListener가 콜백에 성공하면 discoverServices()를 호출하여 로컬 기기에서 서비스를 검색할 수 있습니다.

로컬 서비스가 검색되면 로컬 서비스가 검색되었는지 여부에 따라 WifiP2pManager.DnsSdServiceResponseListener 또는 WifiP2pManager.UpnpServiceResponseListener에 대한 콜백이 수신됩니다. Bonjour 또는 Upnp를 사용하도록 등록되어 있어야 합니다. 두 경우 모두 수신된 콜백에는 피어 기기를 나타내는 WifiP2pDevice 객체입니다.

네트워크 사용량

새 메서드 isActiveNetworkMetered()를 사용하면 다음을 실행할 수 있습니다. 기기가 현재 데이터 전송량 제한이 있는 네트워크에 연결되어 있는지 확인합니다. 이 상태를 확인하면 집약적인 네트워크 트랜잭션을 수행하기 전에 사용자의 비용을 야기할 수 있는 데이터 사용량을 관리하고 거래를 지금 수행할지 아니면 나중에 수행할지에 대해 정보에 입각한 결정을 내릴 수 있습니다 (예: 기기가 Wi-Fi에 연결되는 경우).

접근성

접근성 서비스 API

접근성 서비스 API의 도달범위는 Android 4.1에서 크게 증가했습니다. 지금 를 사용하면 복잡한 동작과 같은 더 많은 입력 이벤트를 모니터링하고 응답하는 서비스를 빌드할 수 있습니다. onGesture() 외 다수 사용 중 AccessibilityEvent, AccessibilityNodeInfo, AccessibilityRecord 클래스에 추가하여 입력 이벤트를 수신할 수 있습니다.

또한 접근성 서비스는 사용자를 대신하여 클릭, performActionsetMovementGranularities를 사용하여 텍스트 스크롤 및 단계별 작업 performGlobalAction() 메서드 또한 서비스에서 뒤로, 홈, 최근 항목 열기와 같은 작업을 실행할 수 있습니다. 앱 및 알림을 탭합니다.

맞춤설정 가능한 앱 탐색

Android 앱을 빌드할 때 이제 포커스 가능 항목을 찾아 탐색 스킴을 맞춤설정할 수 있습니다. findFocus()focusSearch()를 사용한 요소와 입력 위젯, 포커스 설정 setAccessibilityFocused() 사용

더 사용하기 쉬운 위젯

새로운 android.view.accessibility.AccessibilityNodeProvider 클래스를 사용하면 다음 작업을 할 수 있습니다. 복잡한 맞춤 뷰를 접근성 서비스에 표시하여 보다 접근하기 쉽게 만들었습니다. android.view.accessibility.AccessibilityNodeProvider를 사용하면 사용자가 캘린더 그리드와 같은 고급 콘텐츠가 있는 위젯으로, 캘린더 일정에 대한 논리적 의미 체계 구조를 제시합니다. 접근성 서비스를 제공합니다. 이 의미론적 특성은 구조를 통해 접근성 서비스는 접근성이 높은 사용자를 위해 보다 유용한 상호작용 모델을 있습니다.

복사하여 붙여넣기

인텐트를 사용하여 복사하여 붙여넣기

이제 setClipData() 메서드를 사용하여 ClipData 객체를 Intent와 연결할 수 있습니다. 인텐트를 사용하여 여러 content: URI를 다른 URI로 전송할 때 특히 유용합니다. 여러 문서를 공유하는 등의 경우에 사용할 수 있습니다. 제공된 content: URI 이렇게 하면 읽기 또는 쓰기 액세스 권한을 제공하는 인텐트의 플래그를 존중하여 다중 URI 액세스를 허용하는 것입니다 이제 ACTION_SEND 또는 ACTION_SEND_MULTIPLE 인텐트를 시작할 때 인텐트에 제공된 URI는 자동으로 ClipData 전파되어 수신자가 액세스할 수 있습니다

HTML 및 문자열 스타일 지원

이제 ClipData 클래스가 스타일이 지정된 텍스트 (HTML 또는 Android 스타일 문자열). newHtmlText()를 사용하여 ClipData에 HTML 스타일 텍스트를 추가할 수 있습니다.

Renderscript

RenderScript 계산 기능이 다음 기능을 통해 향상되었습니다.

  • 하나의 스크립트 내에서 여러 커널을 지원합니다.
  • 새 스크립트 API의 컴퓨팅에서 필터링된 샘플러를 사용하여 할당에서 읽기 지원 rsSample
  • #pragma에서 다양한 수준의 FP 정밀도를 지원합니다.
  • 컴퓨팅 스크립트에서 RS 객체의 추가 정보를 쿼리할 수 있도록 지원합니다.
  • 다양한 성능 개선

새로운 pragma도 사용할 수 있어 Renderscript를 계산합니다. 이를 통해 빠른 벡터 수학 연산과 같은 연산과 같은 NEON을 사용 설정할 수 있습니다. CPU 경로에서 IEEE 754-2008 표준으로는 불가능할 수 있습니다.

참고: 실험용 Renderscript 그래픽 엔진은 이제 지원 중단되었습니다.

애니메이션

활동 시작 애니메이션

이제 확대/축소 애니메이션이나 Activity 맞춤 애니메이션을 만들 수 있습니다. 원하는 애니메이션을 지정하려면 ActivityOptions API를 사용하여 Bundle를 빌드하세요. 그런 다음 활동을 시작하는 메서드(예: startActivity())

ActivityOptions 클래스에는 각 클래스마다 다른 메서드가 포함되어 있습니다. 다음과 같은 애니메이션 유형을 선택할 수 있습니다.

makeScaleUpAnimation()
지정된 시작 지점부터 활동 창을 확대하는 애니메이션을 만듭니다. 위치 및 지정된 시작 크기를 정의합니다. 예를 들어 Android 4.1에서는 앱을 열 때 이 매개변수를 사용합니다.
makeThumbnailScaleUpAnimation()
지정된 범위부터 시작하여 활동 창을 확대하는 애니메이션을 만듭니다. 제공된 썸네일 이미지가 표시됩니다 예를 들어, Android 4.1에서는 앱으로 돌아갈 때 이 속성을 사용합니다.
makeCustomAnimation()
자체 리소스로 정의한 애니메이션 만들기(애니메이션을 정의하는 애니메이션) 또 다른 하나는 중지되고 있는 활동을 위한 것입니다.

시간 애니메이터

TimeAnimator는 간단한 콜백을 제공합니다. 이를 알리는 TimeAnimator.TimeListener가 포함된 메커니즘 확인할 수 있습니다. 이 Animator에는 지속 시간, 보간 유형 또는 객체 값 설정이 없습니다. 리스너의 콜백은 총 경과 시간 및 이전 애니메이션 프레임 이후의 경과 시간입니다.

사용자 인터페이스

알림

Android 4.1에서는 더 큰 콘텐츠 영역, 큰 이미지 미리보기, 우선순위를 설정할 수 있습니다.

알림 스타일

새 메서드 setStyle()를 사용하면 세 가지의 새로운 스타일 중 하나를 선택하여 각 스타일마다 더 큰 콘텐츠 영역을 제공합니다. 받는사람 큰 콘텐츠 영역의 스타일을 지정하려면 setStyle()를 다음 객체 중 하나를 전달합니다.

Notification.BigPictureStyle
큰 이미지 첨부파일이 포함된 알림
Notification.BigTextStyle
하나의 이메일과 같이 많은 텍스트가 포함된 알림
Notification.InboxStyle
여러 이메일의 스니펫과 같이 문자열 목록이 포함된 알림
알림 작업

이제 화면 하단에 표시되는 작업 버튼이 최대 2개까지 지원됩니다. 알림 메시지(알림에 보통 또는 더 큰 스타일이 사용되는지 여부)가 포함됩니다.

작업 버튼을 추가하려면 addAction()를 호출합니다. 이 메서드는 아이콘의 드로어블 리소스, 버튼의 텍스트 및 작업을 정의하는 PendingIntent Perfrom으로 전송합니다.

우선순위

이제 알림의 중요도가 어느 정도인지 시스템에 암시할 수 있습니다. 목록의 알림 순서를 setPriority()를 사용하여 우선순위를 지정합니다. 나 PRIORITY_* 상수로 정의된 다섯 가지 우선순위 수준 중 하나를 전달할 수 있습니다. (Notification 클래스에서) 기본값은 PRIORITY_DEFAULT이며 높은 2단계와 낮은 2가지가 있습니다.

높은 우선순위 알림은 일반적으로 사용자가 빠르게 응답하고 이러한 콘텐츠는 새로운 채팅 메시지, 문자 메시지 또는 임박한 일정 알림 등입니다. 낮은 우선순위 알림에는 만료된 캘린더 일정 또는 앱 프로모션 등이 있습니다.

시스템 UI 컨트롤

Android 4.0 (Ice Cream Sandwich)에는 시스템 UI의 가시성을 제어하는 새로운 플래그가 추가됨 요소(예: 시스템 표시줄의 모양을 어둡게 하거나 휴대전화에서 완전히 사라지게 하는 등)가 있습니다. Android 4.1에는 시스템의 모양을 추가로 제어할 수 있는 몇 가지 플래그가 추가됩니다. setSystemUiVisibility()를 호출하여 UI 요소 및 요소와 관련된 활동 레이아웃 다음 플래그를 전달합니다.

SYSTEM_UI_FLAG_FULLSCREEN
중요하지 않은 시스템 UI (예: 상태 표시줄)를 숨깁니다. Activity가 오버레이 모드( android:windowActionBarOverlay 사용 설정)의 경우 이 플래그는 작업 모음을 숨기고 두 광고를 숨기고 표시할 때 조정된 애니메이션을 사용합니다
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
활동 레이아웃을 설정할 때 사용할 수 있는 화면 영역과 동일한 화면 영역을 사용합니다. 시스템 UI 요소가 있더라도 SYSTEM_UI_FLAG_FULLSCREEN를 사용 설정함 여전히 표시됩니다. 레이아웃의 일부가 이는 앱에서 자주 사용하는 시스템 UI를 숨기고 표시하는 데 SYSTEM_UI_FLAG_FULLSCREEN: 시스템 UI가 숨겨지거나 표시될 때마다 새 레이아웃 경계로 조정
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
활동 레이아웃을 설정할 때 사용할 수 있는 화면 영역과 동일한 화면 영역을 사용합니다. 사용 설정된 SYSTEM_UI_FLAG_HIDE_NAVIGATION (Android 4.0에 추가됨) 시스템 UI 요소가 계속 표시되더라도 말이죠. 레이아웃의 일부는 오버레이된 앱에서 탐색 메뉴를 숨기고 표시하는 경우가 많을 때 유용합니다. SYSTEM_UI_FLAG_HIDE_NAVIGATION를 사용하면 됩니다. 탐색 메뉴가 숨겨지거나 표시될 때마다 새 레이아웃 경계로 조정
SYSTEM_UI_FLAG_LAYOUT_STABLE
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 또는 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION를 사용하는 경우 이 플래그를 추가하여 호출할 때 fitSystemWindows()가 정의된 경계는 사용 가능한 화면 공간과 관련하여 일관되게 유지됩니다. 즉, 이 플래그를 설정하면 fitSystemWindows()는 시스템 UI 요소의 공개 상태가 변경되지 않은 것처럼 동작합니다. 모든 시스템 UI를 숨긴 후에도 마찬가지입니다.

다른 관련 시스템 UI 플래그에 대한 자세한 내용은 (Android 4.0에서 추가됨)

원격 뷰

GridLayoutViewStub 이제 이동 가능한 뷰이므로 앱 위젯 및 알림 맞춤 레이아웃입니다.

글꼴 모음

Android 4.1은 Roboto 글꼴 스타일의 여러 변형을 추가하여 총 10개의 변형을 생성합니다. 모두 앱에서 사용할 수 있습니다. 이제 앱에서 빛과 조명의 모든 기기에 액세스할 수 있습니다. 요약된 변형입니다.

사용 가능한 전체 Roboto 글꼴 변형 세트는 다음과 같습니다.

  • 일반
  • 기울임꼴
  • 굵게
  • 굵게-기울임꼴
  • 얕은 수면
  • 밝은 기울임꼴
  • 좁게 일반
  • 굵은 기울임꼴
  • 굵게
  • 굵은 기울임꼴

fontFamily에서 이 중 하나를 적용할 수 있습니다. 속성을 textStyle 속성과 조합하여 사용하세요.

지원되는 fontFamily 값은 다음과 같습니다.

  • 일반 Roboto의 경우 "sans-serif"
  • "sans-serif-light": Roboto Light
  • "sans-serif-condensed": Roboto 압축

그런 다음 textStyle 값으로 굵게 또는 기울임꼴을 적용할 수 있습니다. "bold""italic". 다음과 같이 둘 다 적용할 수 있습니다. android:textStyle="bold|italic"

Typeface.create()도 사용할 수 있습니다. 예: Typeface.create("sans-serif-light", Typeface.NORMAL)

입력 프레임워크

여러 입력 장치

새로운 InputManager 클래스를 사용하면 현재 연결되어 있고 새 기기가 있을 때 알림을 받도록 등록 추가, 변경 또는 삭제됩니다. 이는 특히 게임 제작 시 참고할 수 있는 여러 플레이어를 지원하고 연결된 컨트롤러가 몇 개인지 감지하려는 경우 컨트롤러 수가 변경될 때를 예로 들 수 있습니다.

다음을 호출하여 연결된 모든 입력 장치를 쿼리할 수 있습니다. getInputDeviceIds() 이 함수는 다음을 반환합니다. 정수 배열이며, 각 정수는 서로 다른 입력 장치의 ID입니다. 그런 다음 획득까지 getInputDevice() 남음 지정된 입력 기기 ID의 InputDevice

새로운 입력 장치가 연결, 변경 또는 연결 해제될 때 알림을 받으려면 InputManager.InputDeviceListener 인터페이스를 구현하고 registerInputDeviceListener()에 등록합니다.

입력 컨트롤러 진동

연결된 입력 장치에 자체 진동 기능이 있는 경우 이제 기존 Vibrator API를 사용하여 기기의 진동을 간단히 처리하면 됩니다. InputDevice에서 getVibrator()를 호출합니다.

권한

새로운 권한은 다음과 같습니다.

READ_EXTERNAL_STORAGE
외부 저장소에 대해 보호된 읽기 액세스를 제공합니다. Android 4.1에서는 기본적으로 모든 애플리케이션은 액세스할 수 있습니다 이는 애플리케이션이 읽기 액세스 권한을 부여할 수 있습니다. 애플리케이션이 이미 쓰기 액세스를 요청하는 경우 자동으로 읽기 액세스 권한도 부여됩니다 읽기 액세스를 사용 설정할 수 있는 새로운 개발자 옵션이 제공됩니다 Android가 어떻게 동작하는지에 대해 개발자가 자신의 애플리케이션을 테스트할 수 있도록 있습니다.
android.Manifest.permission.READ_USER_DICTIONARY
애플리케이션이 사용자 사전을 읽을 수 있도록 허용합니다. 이것은 IME 또는 설정 앱과 같은 사전 편집기.
READ_CALL_LOG
애플리케이션에서 다음에 대한 정보가 포함된 시스템의 통화 기록을 읽을 수 있도록 허용합니다. 수신 및 발신 전화에 모두 적용됩니다.
WRITE_CALL_LOG
애플리케이션이 휴대전화에 저장된 시스템의 통화 기록을 수정하도록 허용합니다.
android.Manifest.permission.WRITE_USER_DICTIONARY
애플리케이션이 사용자의 단어 사전에 쓸 수 있도록 허용합니다.

기기 기능

Android 4.1에는 텔레비전 화면에 사용자 인터페이스 FEATURE_TELEVISION를 표시합니다. 앱에 다음이 필요하다고 선언하려면 텔레비전 인터페이스의 경우 매니페스트 파일에서 <uses-feature> 요소를 사용하여 이 기능을 선언합니다.

<manifest ... >
    <uses-feature android:name="android.hardware.type.television"
                  android:required="true" />
    ...
</manifest>

이 기능은 '텔레비전'을 정의합니다. 일반적인 거실 텔레비전 환경이 될 것입니다. 사용자가 먼 곳에 앉아있는 큰 화면에 표시되죠. D패드 같은 것이기 때문에 일반적으로 터치나 마우스/포인터 기기입니다.