햅틱 구현

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

장치 제조업체는 일반적으로 각 장치에 대해 생성된 개인 자산의 소유자로 간주됩니다. 따라서 그들의 엔지니어링 노력은 종종 장치별로 집중됩니다. 생태계에 있는 다른 장치의 일관성에 거의 또는 전혀 노력을 기울이지 않습니다.

이와는 대조적으로 개발자는 각 기기의 기술 사양에 관계없이 생태계의 모든 Android 휴대폰에서 작동하는 앱을 빌드하기 위해 노력합니다. 이러한 접근 방식의 차이로 인해 단편화 문제가 발생할 수 있습니다. 예를 들어 특정 전화기의 하드웨어 기능이 앱 개발자가 설정한 기대치와 일치하지 않습니다. 따라서 햅틱 API가 일부 Android 휴대전화에서는 작동하지만 다른 휴대전화에서는 작동하지 않으면 결과적으로 일관성 없는 생태계가 됩니다. 이것이 하드웨어 구성이 제조업체가 모든 기기에서 Android 햅틱 API를 구현할 수 있도록 하는 데 중요한 역할을 하는 이유입니다.

이 페이지에서는 Android 햅틱 API를 최대한 활용하기 위해 하드웨어 규정 준수를 설정하기 위한 단계별 체크리스트를 제공합니다.

아래 그림은 응집력 있는 생태계를 만드는 데 중요한 단계인 장치 제조업체와 개발자 간의 공통 지식 구축을 보여줍니다.

앱 개발자 및 기기 제조업체를 위한 햅틱 사용 사례 다이어그램

그림 1. 장치 제조업체와 개발자 간의 지식 구축

햅틱 구현 체크리스트

  1. 상수 구현

    • 햅틱을 구현하기 위한 상수 목록입니다.
  2. HAL과 API 간의 매핑 상수

    • 공개 API 상수(프레임워크에서 이름이 지정된 자리 표시자 )와 자리 표시자를 구현하는 HAL 상수 간의 매핑 권장 사항.
    • 이 프로세스에 대해 자세히 알아보려면 권장 매핑을 안내하는 디자인 원칙을 참조하세요.
  3. 하드웨어 평가

    • 대상 햅틱 효과에 대한 지침. 이 지침을 사용하여 하드웨어에 대한 빠른 검사를 수행하십시오.

아래에서 이러한 각 단계를 더 자세히 살펴보겠습니다.

1단계: 상수 구현

이러한 검사를 수행하여 장치가 햅틱을 구현하기 위한 최소 요구 사항을 충족하는지 확인합니다.

햅틱 구현 프로세스의 순서도

그림 2. 효과 구현

프리미티브 구현 단계 순서도

그림 3. 프리미티브 구현

다음 햅틱 상수의 구현 상태를 확인하십시오.

햅틱 상수 위치 및 요약
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK VibrationEffect 클래스
VibrationEffect 의 햅틱 상수는 입력 이벤트의 개념을 포함하지 않으며 UI 요소가 없습니다. 상수에는 EFFECT_CLICKEFFECT_HEAVY_CLICK 와 같이 createPredefined() 에 의해 호출되는 에너지 레벨의 개념이 대신 포함됩니다.
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD VibrationEffect.Composition 클래스
VibrationEffect.Composition 의 햅틱 상수는 확장 가능한 강도를 가질 수 있으며 addPrimitive(int primitiveId, float scale, int delay) 에 의해 호출됩니다.

아래에 설명된 대체 진동은 VibrationEffect 상수를 구현하지 않는 장치에서 수행됩니다. 이러한 장치에서 최상의 성능을 발휘하도록 이러한 구성을 업데이트하는 것이 좋습니다.

  1. EFFECT_CLICK

    VibrationEffect.createWaveformframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern 에서 구성된 타이밍으로 생성된 파형 진동.

  2. EFFECT_HEAVY_CLICK

    VibrationEffect.createWaveform 으로 생성된 파형 진동 및 frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern 에서 구성된 타이밍.

  3. EFFECT_DOUBLE_CLICK

    VibrationEffect.createWaveform 및 타이밍(0, 30, 100, 30)으로 생성된 파형 진동.

  4. EFFECT_TICK

    VibrationEffect.createWaveform 으로 생성된 파형 진동과 frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern 에서 구성된 타이밍.

햅틱 피드백 테스트 단계 순서도

그림 4. 피드백 상수 구현

다음 공개 피드백 상수의 상태를 확인하십시오.

햅틱 상수 위치 및 요약

CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS , KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS , TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , REJECT GESTURE_END GESTURE_START

HapticFeedbackConstants 클래스
HapticFeedbackConstants 의 햅틱 상수는 KEYBOARD_PRESSKEYBOARD_RELEASE 와 같은 특정 UI 요소로 입력 이벤트를 지원하며 이는 performHapticFeedback() 에 의해 호출됩니다.

2단계: HAL과 API 간의 매핑 상수

2단계에서는 공개 HAL 상수와 API 상수 간의 권장 매핑을 제시합니다. 1단계에서 평가된 하드웨어가 HAL 상수를 구현하지 않는 경우 유사한 출력을 생성하기 위해 1단계에서 설명한 대체 패턴을 업데이트하는 데 2단계를 사용해야 합니다. 매핑은 두 가지 기본 모델의 지원을 받습니다.

  • 이산 모델 (단순)

    • 진폭은 이 모델의 핵심 변수입니다. HAL의 각 엔터티는 서로 다른 햅틱 진폭을 나타냅니다.
    • 이 모델은 기본적인 햅틱 UX를 구현하기 위해 필요한 최소한의 요구사항입니다.
    • 더 발전된 햅틱 UX는 고급 하드웨어와 고급 모델(연속 모델)이 필요합니다.
  • 연속 모델 (고급)

    • 질감과 진폭은 이 모델의 주요 변수입니다. HAL의 각 엔터티는 서로 다른 햅틱 텍스처를 나타냅니다. 각 HAL 엔터티의 진폭은 배율( S )에 의해 제어됩니다.
    • 이 모델에는 고급 하드웨어가 필요합니다. OEM이 VibrationEffect.Composition 과 함께 고급 햅틱 UX를 사용하려는 경우(최신 햅틱 API를 최대한 활용하기 위해) 이 모델을 사용하여 하드웨어를 구현하는 것이 좋습니다.

이산 모델

API에 제공된 모든 공용 상수를 적절한 HAL 상수로 매핑하는 것이 좋습니다. 이 프로세스를 시작하려면 장치가 HAL에서 정의할 수 있는 이산 진폭이 있는 햅틱 파형의 수를 확인하십시오. 그 개념을 중심으로 구성된 특정 질문은 다음과 같습니다. 내 전화기에서 사람이 인지할 수 있는 진폭 차이가 있는 단일 임펄스 햅틱 효과를 몇 개나 정의할 수 있습니까? 이 질문에 대한 답이 매핑을 결정합니다.

HAL 상수 정의는 하드웨어 종속 프로세스입니다. 예를 들어 보급형 전화기에는 단일 햅틱 파형을 생성하는 하드웨어 기능만 있을 수 있습니다. 고급 하드웨어 구성 요소가 있는 장치는 더 넓은 범위의 개별 진폭 레벨을 생성하고 HAL에서 여러 햅틱 파형을 정의할 수 있습니다. HAL-API 상수 매핑은 HAL 상수(중간 진폭을 기준선으로 사용)를 취한 다음 거기에서 더 강하거나 더 약한 효과를 정렬합니다.

HAL 상수 범위 및 피드백 진폭 다이어그램

그림 5. 진폭에 따른 HAL 상수 범위

이산 진폭이 있는 HAL 상수의 수가 정의되면 HAL 상수의 수로 HAL 및 API 상수를 매핑해야 합니다. 이 매핑 프로세스는 단일 임펄스 API 상수를 최대 3개의 개별 진폭 레벨 그룹으로 분할할 수 있습니다. API 상수가 분할되는 방식은 수반되는 입력 이벤트에 대한 UX 원칙을 기반으로 합니다. 자세한 내용은 햅틱 UX 디자인 을 참조하십시오.

HAL-API 상수 매핑을 위한 이산 모델

그림 6. HAL-API 상수 매핑: 이산 모델

장치가 이산 진폭을 가진 두 개의 HAL 상수만 지원하는 경우 중간 및 높은 진폭 수준 HAL 상수를 병합하는 것이 좋습니다. 실제로 이 개념의 예는 EFFECT_CLICKEFFECT_HEAVY_CLICK 를 중간 진폭 레벨 HAL 상수인 동일한 HAL 상수에 매핑하는 것입니다. 장치가 이산 진폭을 가진 하나 의 HAL 상수만 지원하는 경우 세 가지 레벨을 모두 하나로 병합하는 것을 고려하십시오.

연속 모델

진폭 확장성이 있는 연속 모델을 적용하여 HAL 상수를 정의할 수 있습니다. 스케일 팩터( S )는 HAL 상수(예: HAL_H0 , HAL_H1 )에 적용되어 스케일된 HAL( HAL_H0 x S )을 생성할 수 있습니다. 이 경우 스케일링된 HAL은 그림 7과 같이 API 상수( HAL_H0 x S1 = H0S1 = EFFECT_TICK )를 정의하기 위해 매핑됩니다. 연속 모델의 진폭 확장성을 사용하여 장치는 고유한 텍스처를 가진 소수의 HAL 상수를 저장할 수 있습니다. 스케일 팩터( S )를 조정하여 진폭 변화를 추가합니다. 장치 제조업체는 제공하려는 다양한 햅틱 텍스처의 수에 따라 HAL 상수의 수를 정의할 수 있습니다.

텍스처 및 진폭에 따른 HAL 상수 범위

그림 7. 텍스처(HAL_H0) 및 진폭 스케일(S)별 HAL 상수 범위

HAL-API 상수 매핑을 위한 연속 모델

그림 8. HAL-API 상수 매핑: 연속 모델

연속 모델에서 다른 HAL 상수는 다른 진폭보다는 다른 햅틱 텍스처 를 나타냅니다. 스케일 팩터( S )는 진폭을 구성할 수 있습니다. 그러나 텍스처의 인식(예: 선명도)은 지속 시간 및 진폭의 인식과 관련이 있으므로 텍스처와 스케일 팩터(HAL-API 매핑의 설계 프로세스에서)를 결합하는 것이 좋습니다.

그림 7은 진폭 확장성을 통해 하나의 HAL에서 많은 API 상수로 변동을 증가시켜 상수 매핑을 보여줍니다.

증가 변형 1

증가 변형 2

그림 9. 진폭 확장성을 통한 변동 증가

참고: 위의 그림은 상수 매핑의 특정 인스턴스를 보여 주므로 명명 규칙은 가상입니다. 이 프로세스를 수행하는 것은 장치 제조업체마다 고유합니다.

VibrationEffect.CompositionPRIMITIVE_TICKPRIMITIVE_CLICK 와 같은 모든 확장 가능한 API 상수에 대해 API 상수의 에너지 레벨은 API 상수가 addPrimitive(int primitiveID, float scale, int delay) 를 통해 선언될 때 float scale 매개변수에 따라 다릅니다. PRIMITIVE_TICKPRIMITIVE_CLICK 는 다른 HAL 상수를 사용하여 명확하게 구분하여 설계할 수 있습니다. 질감 에 변형을 추가하려는 경우 이 방법을 사용하는 것이 좋습니다.

3단계: 하드웨어 평가

하드웨어 평가에는 이 특정 평가에 대해 효과 1, 2 및 3이라는 레이블이 붙은 세 가지 햅틱 효과 정의가 포함됩니다.

효과 1: 미리 정의된 짧은 햅틱 상수

VibrationEffect.EFFECT_CLICK 상수는 2단계에서 제공한 HAL-API 매핑의 기준 효과 또는 공통 분모입니다. 가장 많이 사용되는 효과인 HapticFeedbackConstants.KEYBOARD_PRESS 로 매핑됩니다. 이 효과를 평가하면 명확한 햅틱 에 대한 대상 장치의 준비 상태를 결정하는 데 도움이 됩니다.

효과 2: 짧은 사용자 지정 햅틱 효과

VibrationEffect.createOneShot(20,255) 상수는 사용자 정의 햅틱 효과를 위한 것입니다. 짧은 단일 사용자 정의 임펄스의 경우 지속 시간을 정의하기 위해 권장되는 최대 임계값은 20ms입니다. 20ms보다 긴 단일 임펄스는 윙윙거리는 진동 으로 인식되기 때문에 권장되지 않습니다.

짧은 사용자 정의 햅틱 효과의 파형

그림 10. 짧은 사용자 지정 햅틱 효과

효과 3: 진폭 변화가 있는 긴 사용자 지정 햅틱 효과

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) 상수는 진폭 변화가 있는 긴 사용자 정의 효과를 위한 것입니다. 맞춤형 햅틱 효과를 위해 다양한 진폭을 생성하는 기능은 풍부한 햅틱 에 대한 장치의 기능을 평가하는 지표 중 하나입니다. 권장되는 timings []amplitudes [] 은 각각 {500, 500}{128, 255} 이며, 이는 500ms 샘플링 속도로 진폭이 50%에서 100%로 증가하는 추세를 나타냅니다.

진폭 변화가 있는 햅틱 효과 파형

그림 11. 진폭 변화가 있는 긴 맞춤형 햅틱 효과

Effect 3에 대한 진폭 제어의 하드웨어 기능을 확인하려면 Vibrator.hasAmplitudeControl() 메서드를 사용하십시오. 의도한 대로 다양한 진폭으로 VibrationEffect.createWaveform 을 실행하려면 결과가 true 여야 합니다.

주관적 햅틱 효과 평가 순서도

그림 12. 햅틱 효과 1, 2, 3의 피험자 평가

주관적인 평가 수행

빠른 일관성 확인을 위해 먼저 주관적인 평가를 수행하십시오. 주관적인 평가의 목표는 햅틱 효과의 진폭을 관찰하여 장치가 사람이 인지할 수 있는 진폭으로 햅틱을 생성할 수 있는지 여부를 결정하는 것입니다.

이 개념을 중심으로 구성된 특정 질문은 다음과 같습니다. 장치가 예상대로 사용자에게 쉽게 인지할 수 있는 햅틱 효과를 생성할 수 있습니까? 이 질문에 답하면 사용자가 느낄 수 없는 감지할 수 없는 햅틱 또는 파형이 의도한 대로 패턴을 생성하지 않는 의도하지 않은 햅틱을 포함하여 실패한 햅틱 을 방지하는 데 도움이 됩니다.