티스토리 뷰




1. 실내 위치 탐색 (WI-FI RTT)


Android P에서는 Wi-Fi RTT(Round-Trip-Time)라고도 불리는 IEEE 802.11mc Wi-Fi 프로토콜을 지원하므로, 앱에서 실내 위치추적을 활용할 수 있습니다.

하드웨어 지원이 포함된 Android P 기기에서는 앱이 새로운 RTT API를 사용하여 주변에 있는 RTT 지원 Wi-Fi 액세스 지점(AP)까지의 거리를 측정할 수 있습니다. 기기에서 위치가 활성화되어 있고 Wi-Fi 스캐닝이 켜져 있어야 하며(Settings > Location), 앱은 ACCESS_FINE_LOCATION 권한이 있어야 합니다. RTT 사용을 위해 기기를 AP에 연결할 필요는 없습니다. 개인정보 보호를 위해, 휴대폰에서만 AP에 대한 거리를 측정할 수 있으며 AP에는 이 정보가 없습니다.

기기에서 3개 이상의 AP에 대한 거리를 측정하는 경우, 다변측정(MLAT) 알고리즘을 사용하여 해당 측정에 가장 적합한 기기 위치를 측정할 수 있습니다. 일반적으로 그 결과는 1~2미터 이내로 정확합니다.

이러한 정확도를 이용하면 건물 내 탐색, 명확한 음성 제어와 같은 미세 위치 기반 서비스(예: "이 조명을 켜세요") 그리고 위치 기반 정보(예: "이 상품에 특별 할인이 있나요?")와 같은 새로운 경험을 구현할 수 있습니다.




2.  디스플레이 컷-아웃 지원


Android P에서는 카메라와 스피커를 위한 디스플레이 컷아웃이 있는 최신 에지 투 에지 화면을 지원합니다. 새로운DisplayCutout 클래스를 사용하면 콘텐츠가 나타나서는 안되는 비작동 영역의 위치와 모양을 찾아낼 수 있습니다. 이러한 컷아웃 영역의 존재 여부와 위치를 결정하려면 getDisplayCutout() 메서드를 사용하세요.

새로운 창 레이아웃 속성인 layoutInDisplayCutoutMode를 사용하면 앱이 해당 콘텐츠를 기기 컷아웃 주변에 배치할 수 있습니다. 다음 값 중 하나로 이 속성을 설정할 수 있습니다.

Android P가 실행되는 모든 기기나 에뮬레이터에서 다음과 같이 화면 컷아웃을 시뮬레이션할 수 있습니다.

  1. 개발자 옵션을 활성화합니다.
  2. Developer options 화면에서 Drawing 섹션으로 스크롤하고 Simulate a display with a cutout을 선택합니다.
  3. 컷아웃의 크기를 선택합니다.

참고: Android P가 실행되는 기기나 에뮬레이터를 사용하여 컷아웃 영역 주변에서 콘텐츠 표시를 테스트하는 것이 좋습니다.



서로 다른 컷아웃 크기를 나타내는 개발자 옵션 화면





3. 알림창 변경


메시지 알림

회신과 대화가 있는 MessagingStyle.

향상된 메시지 환경

Android 7.0(API 레벨 24)부터는 메시지에 회신하거나 알림에서 직접 다른 텍스트를 입력하는 액션을 추가할 수 있습니다. Android P에서는 이 기능이 다음과 같이 향상되었습니다.

  • 이미지 지원: 이제 Android P는 전화의 메시지 알림에 이미지를 표시합니다. 메시지에 setData()를 사용하여 이미지를 표시할 수 있습니다.

  • 단순화된 대화 참가자 지원: 새로운 Notification.Person 클래스는 대화 참가자(이들의 아바타 및 URI 포함)를 식별하는 데 사용됩니다. 이제 addMessage()와 같은 기타 여러 API에서CharSequence 대신 Person 클래스를 활용합니다.

  • 회신을 초안으로 저장: 사용자가 실수로 메시지 알림을 닫은 경우, 앱은 시스템이 보낸 EXTRA_REMOTE_INPUT_DRAFT를 검색할 수 있습니다. 이 추가 기능을 사용하면 사용자가 회신을 완성할 수 있도록 앱의 텍스트 필드에 텍스트를 미리 채울 수 있습니다.

  • 대화가 그룹 대화인지 여부를 식별: setGroupConversation()을 사용하면 대화가 그룹 대화인지 비그룹 대화인지를 확실하게 식별할 수 있습니다.

  • 인텐트의 문맥적 액션 설정: setSemanticAction() 메서드를 사용하여 액션에 문맥적 의미를 지정할 수 있습니다(예: 읽기, 삭제, 회신 등으로 표시).

  • SmartReply: Android P에서는 메시지 앱에서 제공되는 것과 동일한 제안 회신을 지원합니다. 일련의 표준 회신을 사용자에게 제공하려면 RemoteInput.setChoices()를 사용하세요.

채널 설정, 브로드캐스트 및 알림 일시중지

Android O에서는 개발자가 표시하고자 하는 각 유형의 알림에 대해 사용자 맞춤형 채널을 생성할 수 있는알림 채널이 도입되었습니다. Android P는 이러한 변경을 통해 알림 채널 설정을 단순화합니다.

  • 채널 그룹 차단: 이제 앱의 알림 설정 내에서 사용자가 전체 채널 그룹을 차단할 수 있습니다.isBlocked() 메서드를 사용하면 그룹이 차단된 시기를 식별할 수 있으며, 이 경우 이 그룹에 있는 채널에는 어떤 알림도 보내지 않습니다.

    또한 새로운 getNotificationChannelGroup() 메서드를 사용하여 앱이 현재의 채널 그룹 설정을 쿼리할 수 있습니다.

  • 새로운 브로드캐스트 인텐트 유형: 이제 Android 시스템에서는 알림 채널과 채널 그룹의 차단 상태가 변경될 때 브로드캐스트 인텐트를 보냅니다. 차단된 채널이나 그룹을 소유하는 앱이 이 인텐트를 수신할 수 있고 그에 따라 반응할 수 있습니다. 이러한 인텐트 액션과 엑스트라에 대한 자세한 내용은NotificationManager 참조에서 업데이트된 상수 목록을 참조하세요. 브로드캐스트 인텐트에 대한 반응에 대해서는 브로드캐스트를 참조하세요.

  • 새로운 알림 일시중지 우선순위 범주: NotificationManager.Policy 에는 다음과 같은 2개의 새로운 정책 상수가 있습니다: PRIORITY_CATEGORY_ALARMS (알람에 우선순위 지정) 및PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER (미디어, 시스템 및 게임 사운드에 우선순위 지정).


4. 멀티 카메라 지원 및 카메라 업데이트


이제 Android P가 실행되는 기기에서는 두 대 이상의 물리적 카메라에서 동시에 스트림에 액세스할 수 있습니다. 듀얼 전방 카메라나 듀얼 후방 카메라가 달린 기기에서, 한 대의 카메라로는 불가능한 혁신적인 기능을 구현할 수 있습니다(예: 매끄러운 확대/축소, 보케 및 스테레오 비전). 이 API를 사용하여 두 대 이상의 카메라를 자동으로 전환하는 논리적 카메라 스트림이나 합성된 카메라 스트림을 호출할 수도 있습니다.

카메라의 기타 개선 사항으로는 새로운 Session 매개변수와 Surface 공유가 있습니다. Session 매개변수는 초기 캡처 중에 지연을 줄여주는 역할을 하며, Surface 공유는 카메라 고객이 카메라 스트리밍을 중단/시작하지 않고도 다양한 사용 사례를 처리할 수 있도록 해줍니다. 또한 디스플레이 기반의 플래시 지원을 위한 API를 추가했고, 앱 수준의 이미지 흔들림 보정 및 특수 효과를 위한 OIS 타임스탬프 액세스 기능을 추가했습니다.

Android P에서는 또한 지원되는 기기에서 외부 USB/UVC 카메라 지원이 가능합니다.




5. 비트맵 및 드로어블용 이미지 Decoder


Android P에서는 이미지 디코딩을 위한 최신 방법을 제공하기 위해 ImageDecoder를 도입했습니다. 이미지를 디코딩하려면 BitmapFactory 및BitmapFactory.Options API 대신 ImageDecoder를 사용해야 합니다.

ImageDecoder를 사용하면 바이트 버퍼, 파일 또는 URI로부터 Drawable 또는 Bitmap을 생성할 수 있습니다. 이미지를 디코딩하려면 먼저 인코딩된 이미지의 소스와 함께 createSource()를 호출합니다. 그런 다음, ImageDecoder.Source 객체를 전달해 decodeBitmap() 또는 decodeDrawable()을 호출하여 Bitmap 또는Drawable을 생성합니다. 기본 설정을 변경하려면 OnHeaderDecodedListener를 decodeBitmap() 또는 decodeDrawable()로 전달합니다. ImageDecoder는 이미지의 기본 너비 및 높이(알려진 경우)로 onHeaderDecoded()를 호출합니다. 인코딩된 이미지가 애니메이션 GIF 또는 WebP인 경우 decodeDrawable()AnimatedImageDrawable 클래스의 인스턴스인 Drawable을 반환합니다.

이미지 속성을 설정하기 위해 다른 메서드를 사용할 수 있습니다. 여기에는 다음이 포함됩니다.

  • 디코딩된 이미지의 배율을 정확한 크기로 조정하려면, 대상 치수로 setResize()를 호출합니다. 또한 샘플 크기를 사용하여 이미지의 배율을 조정할 수도 있습니다. 샘플 크기를 setResize()에 직접 전달하거나 getSampledSize()를 호출하여 ImageDecoder가 가장 효율적으로 샘플링할 수 있는 크기를 알아냅니다.
  • 배율 조정된 이미지 범위 내에서 이미지를 잘라내려면 setCrop()을 호출합니다.
  • 변경 가능한 Bitmap을 생성하려면 setMutable(true)을 호출합니다.

ImageDecoder를 사용하면 둥근 모서리나 원형 마스크 등의 복잡한 맞춤형 효과를 이미지에 추가할 수도 있습니다. 원하는 그리기 명령을 실행하려면 PostProcessor의 인스턴스와 함께 setPostProcessor()를 사용합니다. AnimatedImageDrawable을 후처리하는 경우, 효과가 모든 프레임에 적용됩니다.



6. 애니메이션

Android P에서는 GIF 및 WebP 애니메이션 이미지를 그리고 표시하기 위해 새 AnimatedImageDrawable 클래스가 도입됩니다. RenderThread가AnimatedImageDrawable의 애니메이션을 구동한다는 점에서 AnimatedImageDrawable은 AnimatedVectorDrawable과 유사하게 동작합니다. RenderThread는 또한 디코딩을 위해 워커 스레드를 사용하므로, 디코딩이 RenderThread와 충돌하지 않습니다. 이 구현에서는 앱 업데이트를 관리하거나 앱 UI 스레드와 충돌하지 않고도 앱에서 애니메이션 이미지를 가질 수 있습니다.

AnimagedImageDrawable은 새 ImageDecoder로 디코딩될 수 있습니다. 다음 코드 스니펫은 ImageDecoder를 사용하여 AnimatedImageDrawable을 디코딩하는 방법을 보여줍니다.

Drawable d = ImageDecoder.decodeDrawable(...);
if (d instanceof AnimatedImageDrawable) {
   
((AnimatedImageDrawable) d).start();   // Prior to start(), the first frame is displayed
}

ImageDecoder에는 이미지를 추가적으로 수정할 수 있는 여러 메서드가 있습니다. 예를 들어, setPostProcessor() 메서드를 사용하여 이미지의 모양을 수정할 수 있습니다(예: 원형 마스크나 둥근 모서리 적용).



7. 기타..






공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함