장치 제조업체는 일반적으로 각 장치에 대해 생성된 개인 자산의 소유자로 간주됩니다. 따라서 이들의 엔지니어링 노력은 종종 장치별로 집중됩니다. 생태계에 있는 다른 장치의 일관성을 유지하는 데 거의 또는 전혀 노력을 기울이지 않습니다.
반대로 개발자는 각 기기의 기술 사양에 관계없이 생태계의 모든 Android 휴대전화에서 작동하는 앱을 구축하기 위해 노력합니다. 이러한 접근 방식의 차이는 조각화 문제를 일으킬 수 있습니다. 예를 들어 특정 휴대폰의 하드웨어 기능이 앱 개발자가 설정한 기대치와 일치하지 않습니다. 따라서 햅틱 API가 일부 Android 휴대전화에서는 작동하지만 다른 휴대전화에서는 작동하지 않는 경우 결과적으로 일관성 없는 생태계가 됩니다. 이것이 제조업체가 모든 장치에서 Android 햅틱 API를 구현할 수 있도록 하드웨어 구성이 중요한 역할을 하는 이유입니다.
이 페이지에서는 Android 햅틱 API를 최대한 활용하기 위해 하드웨어 규정 준수를 설정하기 위한 단계별 체크리스트를 제공합니다.
아래 그림은 장치 제조업체와 개발자 간의 공통 지식 구축을 보여 주며, 이는 응집력 있는 생태계를 만드는 데 중요한 단계입니다.
그림 1. 장치 제조업체와 개발자 간의 지식 구축
햅틱 구현 체크리스트
- 햅틱을 구현하기 위한 상수 목록입니다.
- 공개 API 상수(프레임워크에서 명명된 자리 표시자 )와 자리 표시자를 구현하는 HAL 상수 간의 매핑 권장 사항입니다.
- 이 프로세스에 대해 자세히 알아보려면 권장 매핑을 안내하는 디자인 원칙을 참조하세요.
- 대상 햅틱 효과에 대한 지침. 이 지침을 사용하여 하드웨어에 대한 빠른 검사를 수행하십시오.
아래에서 이러한 각 단계를 자세히 살펴보겠습니다.
1단계: 상수 구현
장치가 햅틱을 구현하기 위한 최소 요구 사항을 충족하는지 확인하려면 다음 검사를 수행하십시오.
그림 2. 효과 구현
그림 3. 프리미티브 구현
다음 햅틱 상수 구현 현황을 확인하세요.
햅틱 상수 | 위치 및 요약 |
---|---|
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK | VibrationEffect 클래스VibrationEffect 의 햅틱 상수는 입력 이벤트의 개념을 포함하지 않으며 UI 요소가 없습니다. 상수에는 createPredefined() 에 의해 호출되는 EFFECT_CLICK 및 EFFECT_HEAVY_CLICK 와 같은 에너지 레벨 개념이 대신 포함됩니다. |
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
상수를 구현하지 않는 장치에서 수행됩니다. 이러한 장치에서 최상의 성능을 발휘하도록 이러한 구성을 업데이트하는 것이 좋습니다.
EFFECT_CLICK
VibrationEffect.createWaveform
및frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
에서 구성된 타이밍으로 생성된 파형 진동.EFFECT_HEAVY_CLICK
VibrationEffect.createWaveform
및frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern
에서 구성된 타이밍으로 생성된 파형 진동.EFFECT_DOUBLE_CLICK
VibrationEffect.createWaveform
및 타이밍(0, 30, 100, 30)으로 생성된 파형 진동.EFFECT_TICK
VibrationEffect.createWaveform
및frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
에서 구성된 타이밍으로 생성된 파형 진동.
그림 4. 피드백 상수 구현
다음 공용 피드백 상수의 상태를 확인하십시오.
햅틱 상수 | 위치 및 요약 |
---|---|
| HapticFeedbackConstants 클래스HapticFeedbackConstants의 햅틱 상수는 HapticFeedbackConstants performHapticFeedback() 에 의해 호출되는 KEYBOARD_PRESS 및 KEYBOARD_RELEASE 와 같은 특정 UI 요소로 입력 이벤트를 지원합니다. |
2단계: HAL과 API 간의 상수 매핑
2단계에서는 공개 HAL 상수와 API 상수 간의 권장 매핑을 제시합니다. 1단계에서 평가한 하드웨어가 HAL 상수를 구현하지 않는 경우 유사한 출력을 생성하기 위해 2단계를 사용하여 1단계에서 설명한 폴백 패턴을 업데이트해야 합니다. 매핑은 두 개의 서로 다른 기본 모델에 의해 지원됩니다.
개별 모델 (단순)
- 진폭은 이 모델의 핵심 변수입니다. HAL의 각 엔터티는 서로 다른 햅틱 진폭을 나타냅니다.
- 이 모델은 기본적인 햅틱 UX를 구현하기 위한 최소한의 요구사항입니다.
- 보다 진보된 햅틱 UX는 고급 하드웨어와 고급 모델(연속 모델)이 필요합니다.
연속 모델 (고급)
- 질감과 진폭은 이 모델의 핵심 변수입니다. HAL의 각 엔터티는 서로 다른 햅틱 텍스처를 나타냅니다. 각 HAL 엔터티의 진폭은 배율 인수(
S
)에 의해 제어됩니다. - 이 모델에는 고급 하드웨어가 필요합니다. OEM이
VibrationEffect.Composition
과 함께 고급 햅틱 UX를 사용하려는 경우(최신 햅틱 API를 최대한 활용하기 위해) 이 모델을 사용하여 하드웨어를 구현하는 것이 좋습니다.
- 질감과 진폭은 이 모델의 핵심 변수입니다. HAL의 각 엔터티는 서로 다른 햅틱 텍스처를 나타냅니다. 각 HAL 엔터티의 진폭은 배율 인수(
불연속 모델
API에서 제공하는 모든 공개 상수를 적절한 HAL 상수와 매핑하는 것이 좋습니다. 이 프로세스를 시작하려면 기기가 HAL에서 정의할 수 있는 불연속 진폭이 있는 햅틱 파형의 수를 확인하세요. 그 개념을 중심으로 구조화된 특정 질문은 다음과 같습니다. 사람이 인지할 수 있는 진폭 차이가 있는 단일 임펄스 햅틱 효과를 내 전화기에서 정의할 수 있는 것은 몇 개입니까? 이 질문에 대한 답변에 따라 매핑이 결정됩니다.
HAL 상수 정의는 하드웨어 종속 프로세스입니다. 예를 들어 보급형 전화기에는 단일 햅틱 파형을 생성하는 하드웨어 기능만 있을 수 있습니다. 고급 하드웨어 구성 요소가 있는 장치는 더 넓은 범위의 이산 진폭 레벨을 생성하고 HAL에서 여러 햅틱 파형을 정의할 수 있습니다. HAL-API 상수 매핑은 HAL 상수(중간 진폭을 기준선으로 사용)를 취한 다음 거기에서 더 강하거나 약한 효과를 정렬합니다.
그림 5. 진폭에 따른 HAL 상수 범위
이산 진폭이 있는 HAL 상수의 수가 정의되면 HAL 상수의 수로 HAL 및 API 상수를 매핑해야 합니다. 이 매핑 프로세스는 단일 임펄스 API 상수를 최대 3개의 개별 진폭 레벨 그룹으로 분할할 수 있습니다. API 상수가 분할되는 방식은 수반되는 입력 이벤트에 대한 UX 원칙을 기반으로 합니다. 자세한 내용은 햅틱 UX 디자인 을 참조하세요.
그림 6. HAL-API 상수 매핑: 개별 모델
장치가 불연속 진폭이 있는 두 개의 HAL 상수만 지원하는 경우 중간 및 높은 진폭 수준 HAL 상수를 병합하는 것을 고려하십시오. 실제로 이 개념의 예는 EFFECT_CLICK
및 EFFECT_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 상수의 수를 정의할 수 있습니다.
그림 7. 텍스처별 HAL 상수 범위(HAL_H0) 및 진폭 스케일(S)
그림 8. HAL-API 상수 매핑: 연속 모델
연속 모델에서 서로 다른 HAL 상수는 서로 다른 진폭이 아니라 서로 다른 햅틱 텍스처 를 나타냅니다. 스케일 팩터( S
)는 진폭을 구성할 수 있습니다. 그러나 질감(예: 선명도)에 대한 인식은 지속 시간 및 진폭에 대한 인식과 관련이 있으므로 HAL-API 매핑의 설계 과정에서 질감과 배율 요소를 결합하는 것이 좋습니다.
그림 7은 하나의 HAL에서 진폭 확장성이 있는 여러 API 상수로 변동을 증가시켜 상수 매핑을 보여줍니다.
그림 9. 진폭 확장성에 따른 변화 증가
참고: 위의 그림은 상수 매핑의 특정 인스턴스를 보여주므로 이름 지정 규칙은 가상입니다. 이 프로세스를 수행하는 것은 각 장치 제조업체마다 고유합니다.
VibrationEffect.Composition
의 PRIMITIVE_TICK 및 PRIMITIVE_CLICK
와 같은 확장 가능한 모든 API 상수의 경우, API 상수가 PRIMITIVE_TICK
addPrimitive(int primitiveID, float scale, int delay)
를 통해 선언될 때 API 상수의 에너지 수준은 float scale
매개변수에 따라 달라집니다. PRIMITIVE_TICK
과 PRIMITIVE_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. 진폭 변화가 있는 긴 맞춤형 햅틱 효과
효과 3에 대한 진폭 제어의 하드웨어 기능을 확인하려면 Vibrator.hasAmplitudeControl()
메서드를 사용하십시오. 의도한 대로 다양한 진폭으로 VibrationEffect.createWaveform
을 실행하려면 결과가 true
여야 합니다.
그림 12. 촉각 효과 1, 2, 3의 피험자 평가
주관적 평가 수행
빠른 일관성 확인을 위해 주관적 평가를 먼저 수행하십시오. 주관적 평가의 목표는 장치가 사람이 인지할 수 있는 진폭으로 촉각을 생성할 수 있는지 여부를 결정하기 위해 촉각 효과의 진폭을 관찰하는 것입니다.
이 개념을 중심으로 구성된 특정 질문은 다음과 같습니다. 장치가 예상대로 사용자가 쉽게 인지할 수 있는 햅틱 효과를 생성할 수 있습니까? 이 질문에 답하면 사용자가 느낄 수 없는 감지할 수 없는 햅틱 또는 파형이 의도한 대로 패턴을 생성하지 않는 의도하지 않은 햅틱을 포함하여 실패한 햅틱 을 방지하는 데 도움이 됩니다.