In modern mobile user experience design, haptic feedback plays a crucial role in providing tactile confirmation for button presses, scroll wheels, keyboard typing, gaming effects, and accessibility cues. Contemporary Android devices incorporate advanced linear resonant actuators (LRA) or voice-coil haptic motors capable of generating nuanced vibration envelopes, frequency sweeps, and variable amplitude feedback using the VibrationEffect API. When an application fails to produce haptic feedback, triggers jarring buzzing instead of subtle clicks, or consumes excessive power by locking hardware actuators, diagnosing the issue requires inspecting the underlying haptics pipeline via ADB dumpsys vibrator.
Understanding the Android Vibrator Framework
The Android haptic architecture comprises several interacting components:
- Vibrator HAL (Hardware Abstraction Layer): Interfaces directly with hardware haptic driver ICs, exposing capabilities like resonant frequency tracking, amplitude control, and primitive effect triggers.
- VibratorManagerService & VibratorService: Manages concurrent client requests, enforces user settings (e.g., Touch Feedback toggle), scales vibration amplitude, and ensures background apps do not vibrate unexpectedly.
- VibrationEffect Types: Modern Android supports predefined haptic primitives (
EFFECT_CLICK,EFFECT_TICK,EFFECT_HEAVY_CLICK), step waveforms (duration and amplitude arrays), and composition waveforms.
Generating a Complete Haptic Diagnostics Dump
To inspect physical haptic hardware capabilities and recent vibration logs on a connected Android device, run:
adb shell dumpsys vibrator
On devices supporting multiple independent vibration motors (or newer Android 12+ releases), you can also query the multi-actuator manager service:
adb shell dumpsys vibrator_manager
Inspecting Physical Actuator Capabilities
Examine the first section of the output to determine what hardware features are supported by your device\u2019s physical haptic motor:
Vibrator (Id=0):
Has Amplitude Control: true
Has External Control: false
Resonant Frequency: 170.0 Hz
Q-Factor: 24.5
Supported Effects: [CLICK, DOUBLE_CLICK, TICK, THUD, POP, HEAVY_CLICK]
Supported Primitives: [CLICK, TICK, LOW_TICK, QUICK_FALL, QUICK_RISE, SPIN]
Key hardware parameters:
- Has Amplitude Control: If
true, the motor supports fine-grained intensity modulation (scaling from 1 to 255). Iffalse, the hardware only supports binary on/off pulsing. - Resonant Frequency: The natural mechanical resonance of the linear motor (e.g.,
170.0 Hz). Efficient haptic drivers track this frequency dynamically to maximize tactile impact while minimizing battery draw. - Supported Primitives: Lists hardware-accelerated effects stored directly in the haptic driver ROM for instantaneous playback without latency.
Auditing Active and Recent Vibration Requests
To diagnose which application recently triggered haptic feedback or to catch rogue background processes, inspect the vibration history table:
adb shell dumpsys vibrator | grep -A 20 "Previous vibrations:"
The diagnostic log records caller packages and effect details:
Previous vibrations:
10:15:32.412 - op: com.google.android.inputmethod.latin (uid 10045)
attrs: AudioAttributes [Usage: USAGE_ASSISTANCE_SONIFICATION, Flags: 0]
effect: Prebaked [id: 2, fallback: null]
scale: 0.45, duration: 15ms, status: FINISHED
10:15:30.120 - op: com.example.gameapp (uid 10184)
attrs: AudioAttributes [Usage: USAGE_GAME, Flags: 0]
effect: Waveform [timings: [0, 50, 100, 50], amplitudes: [0, 128, 0, 255]]
scale: 1.00, duration: 200ms, status: FINISHED
Notice the details captured:
- op / uid: The exact package name and Linux user ID that initiated the vibration.
- scale: The calculated amplitude factor applied based on system-wide haptic intensity settings.
- status: Confirms if the vibration completed normally (
FINISHED) or was interrupted by a higher-priority alert (CANCELLED_SUPERSEDED).
Simulating Vibration Effects via ADB for Testing
You can trigger haptic feedback directly from the terminal to test actuator responsiveness and amplitude control:
To trigger a standard 500-millisecond vibration:
adb shell cmd vibrator vibrate 500
To test whether system haptic feedback is globally enabled or disabled in Android system settings:
adb shell settings get system haptic_feedback_enabled
If 0, haptic feedback is disabled across the OS. To enable it:
adb shell settings put system haptic_feedback_enabled 1
Using dumpsys vibrator alongside ADB testing commands allows developers and QA teams to verify tactile timing, diagnose actuator stalls, and optimize haptic battery efficiency across Android applications.