Complete guide to installing and using the HeyJames real-time bidirectional translation app.
HeyJames is distributed through the Google Play Store. Follow these steps to get up and running:
On first launch, HeyJames walks you through a short setup wizard:
After the wizard, you land on the main translation screen and are ready to begin.
The main screen is divided into three zones:
Shows current mode (Listening / Idle), active language pair, Bluetooth connection status, and connection quality indicator.
Full-screen area showing the most recent translation in large text. The original speech appears smaller above it for context.
Microphone button (tap to start/stop), history button (view past translations), and settings gear icon.
| Indicator | Meaning |
|---|---|
| ● Listening | App is actively detecting speech |
| ● Processing | Translating detected speech |
| ● Idle | Listening paused, tap mic to resume |
| ● Offline | No internet; using local fallback models |
| ● Bluetooth | Earbuds connected and receiving audio |
HeyJames is designed with German as the primary earbud language. The screen language can be any of the 17+ supported languages.
detrenesfritptruarzhjakoplnlelrouksvThe app listens non-stop and translates every speech segment automatically. Voice activity detection (VAD) determines when someone has finished speaking.
How to activate: Long-press the mic button until it glows green.
Hold the mic button to record. Release to trigger translation. The speaker decides exactly when to start and stop each utterance.
How to activate: Short-press the mic button (default mode on first launch).
HeyJames routes translations for the German speaker exclusively to the connected Bluetooth earbuds, keeping them private from the other party.
| Setting | Options | Default |
|---|---|---|
| TTS Engine | Google TTS, System TTS | Google TTS |
| Speech Rate | 0.5× – 2.0× | 1.0× |
| Pitch | 0.5× – 2.0× | 1.0× |
| Volume | 0% – 100% | 80% |
| Fallback | Speaker / Silent | Speaker |
The translation screen is designed for readability at arm's length — the distance typical for holding a phone between two people in conversation.
~24sp — more text visible, slightly harder to read at distance
~36sp — recommended for most use cases
~56sp — best for noisy or bright environments
Access display settings via Settings → Display or use the quick toggle in the main screen toolbar.
Access all settings by tapping the gear icon on the main screen.
| Setting | Description | Default |
|---|---|---|
| Earbud Language | Language for Bluetooth audio output (always German) | German (de) |
| Screen Language | Language displayed as large text on screen | Turkish (tr) |
| Default Mode | Continuous Listening or Manual (Push-to-Talk) | Continuous |
| Keep Screen On | Prevents screen timeout during active sessions | On |
| Auto-Start on Launch | Begins listening immediately when app opens | Off |
| Setting | Description | Default |
|---|---|---|
| Translation Provider | Google Cloud Translate, DeepL, or Local | Google Cloud |
| API Key | Custom API key for premium translation quality | Built-in |
| Confidence Threshold | Minimum speech recognition confidence to trigger translation | 0.7 |
| Max Segment Length | Maximum words per translation segment | 50 |
| Auto Language Detection | Automatically detect which language is being spoken | On |
| Setting | Description | Default |
|---|---|---|
| Bluetooth Device | Select which connected Bluetooth device receives audio | Auto-detect |
| TTS Engine | Text-to-speech engine for earbud audio | Google TTS |
| Speech Rate | TTS playback speed multiplier | 1.0× |
| No-Bluetooth Fallback | Use speaker or stay silent when earbuds disconnect | Speaker |
| Setting | Description | Default |
|---|---|---|
| Text Size | Small / Large / Huge | Large |
| Theme | Dark / Light / System Auto | System Auto |
| Show Original Text | Display original speech above translation | On |
| Animation | Text fade-in animation on new translation | On |
| Setting | Description | Default |
|---|---|---|
| Save History | Store session transcripts locally | On |
| Retention Period | Automatically delete history older than N days | 30 days |
| Export Format | Plain text (.txt) or JSON | Plain text |
| Clear All History | Permanently delete all stored transcripts | — |
This section provides architecture context for developers and technically minded users.
Uses Android's SpeechRecognizer API for on-device recognition (continuous mode) with Google Cloud Speech-to-Text as a high-accuracy fallback. VAD (Voice Activity Detection) is implemented using energy-based thresholding.
Primary: Google Cloud Translation API v3 (Neural Machine Translation). Fallback: ML Kit Translation (on-device, downloadable models). Language detection uses Google Cloud Language Detection.
Uses Android TextToSpeech API with audio session routed to the A2DP Bluetooth sink. Audio focus management prevents conflicts with other apps. AudioManager.setMode() configures for Bluetooth SCO.
The app's core is a finite state machine with states: IDLE → LISTENING → PROCESSING → SPEAKING → LISTENING. Each state transition is logged for debugging.
| Permission | Purpose | Required? |
|---|---|---|
RECORD_AUDIO | Microphone access for speech recognition | Yes |
BLUETOOTH / BLUETOOTH_CONNECT | Connect to earbuds for TTS audio routing | Yes |
INTERNET | Cloud translation and speech recognition APIs | Recommended |
WRITE_EXTERNAL_STORAGE | Export conversation history | Optional |
WAKE_LOCK | Keep screen on during active sessions | Optional |
This is a known echo issue. HeyJames automatically pauses the microphone while TTS audio is playing, but in some environments the earbud leakage can be picked up. Solutions:
Yes, with limitations. HeyJames supports offline mode using on-device ML Kit models. To prepare:
Note: Offline translation quality is lower than cloud translation, especially for idiomatic expressions.
Speech audio is sent to Google Cloud Speech-to-Text and Google Cloud Translation APIs for processing — this is necessary for cloud translation quality. This data is subject to Google's privacy policy.