Skip to main content

Overview

Scrcpy for Android provides comprehensive control features to interact with the remote device as if you were using it directly. All control features respect the aspect ratio and resolution of both devices.

Touch Control

Touch events are automatically translated from your local device screen coordinates to the remote device coordinates.

Single Touch

Basic touch interactions work exactly as you’d expect:
  • Tap: Touch and release quickly
  • Long press: Touch and hold
  • Drag: Touch, hold, and move
  • Swipe: Quick touch and slide gesture
All touch coordinates are automatically scaled based on:
  • Remote device resolution
  • Local display dimensions
  • Current orientation (portrait/landscape)
  • Navigation bar visibility

Multi-Touch Support

The app supports full multi-touch gestures with up to 10 simultaneous touch points:
Use two fingers to zoom in/out in supported apps
  • Each touch point is tracked independently
  • Pointer IDs are preserved across events
  • Works in maps, photos, browsers, etc.
Multi-touch events are handled through MotionEvent.ACTION_POINTER_DOWN and MotionEvent.ACTION_POINTER_UP for middle fingers, while ACTION_DOWN and ACTION_UP handle the first and last fingers.

Touch Event Types

The following touch events are supported:

Hardware Navigation Buttons

When the “Bottom control button” option is enabled, on-screen navigation buttons provide quick access to Android system functions.

Available Buttons

Back

Symbol: <Sends: KEYCODE_BACKReturns to previous screen

Home

Symbol: oSends: KEYCODE_HOMEReturns to home screen

App Switch

Symbol: =Sends: KEYCODE_APP_SWITCHOpens recent apps
The navigation bar adapts to device orientation: Portrait Mode:
  • Positioned at bottom of screen
  • Reduces available height by 96 pixels
  • Buttons arranged horizontally
Landscape Mode:
  • Positioned at right side of screen
  • Reduces available width by 96 pixels
  • Buttons arranged vertically
The 96-pixel dimension is used because it’s a multiple of 8, which ensures proper video encoding alignment.

Wake/Sleep with Proximity Sensor

Scrcpy for Android includes proximity sensor integration for power management.
This feature is currently disabled in the code but can be enabled by uncommenting the sensor event handlers in MainActivity.java:716-730.

How It Works

  1. Cover proximity sensor (usually near the front camera)
  2. Tap the screen while sensor is covered
  3. Remote device locks (screen turns off)
  4. Uncover sensor to wake the device

Accessing Local Navbar

Even in full-screen mode, you can access your local device’s navigation:

Swipe Up Gesture

  1. Swipe up from the very bottom edge of your screen
  2. Your local navigation bar appears temporarily
  3. Use your local navigation to switch apps, go home, etc.
  4. The gesture doesn’t interfere with the remote device
This works because the app uses SYSTEM_UI_FLAG_IMMERSIVE_STICKY mode, which allows the system UI to temporarily reappear on swipe-up.

Full-Screen Mode

The app uses immersive full-screen mode with these flags:
  • SYSTEM_UI_FLAG_LAYOUT_STABLE
  • SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  • SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION
  • SYSTEM_UI_FLAG_FULLSCREEN
  • SYSTEM_UI_FLAG_IMMERSIVE_STICKY

Screen Rotation Handling

The app intelligently handles rotation changes:

Automatic Rotation

When the remote device rotates:
  1. Detection: Server sends new resolution configuration
  2. Unbind: Current service connection is released
  3. Swap: Screen dimensions are swapped (height ↔ width)
  4. Reorient: Local orientation changes to match
  5. Rebind: Service reconnects with new parameters
  • App switches to SCREEN_ORIENTATION_SENSOR_LANDSCAPE
  • Dimensions swapped automatically
  • Touch coordinates recalculated
  • No reconnection required
  • App switches to SCREEN_ORIENTATION_SENSOR_PORTRAIT
  • Reverse dimension swap
  • Touch mapping updated
  • Seamless transition

Aspect Ratio Adjustment

The app automatically adjusts padding to maintain correct aspect ratio: When remote device is narrower:
  • Adds horizontal padding (letterboxing)
  • Centers the video stream
When remote device is wider:
  • Adds vertical padding (pillarboxing)
  • Maintains proportions

Control Precision

For applications requiring precise touch input:

High-Precision Mode

  • Touch coordinates use floating-point calculations
  • Conversion to integer only at final step
  • Minimizes rounding errors
  • Accurate to pixel level on remote device

Timing Considerations

  • Touch events are queued for reliable delivery
  • Events sent as fast as network allows
  • No artificial delays added
  • Queue cleared on disconnect to prevent stale events

Disabling Controls

For view-only mode (presentations, monitoring):
  1. Enable “Viewing mode (no control)”
  2. All touch listeners are removed
  3. Navigation buttons are disabled
  4. Only viewing is possible
This is useful for demonstrations where you want to prevent accidental input.

Next Steps

Configuration

Optimize settings for your use case

Troubleshooting

Solve control responsiveness issues