HeyJames Documentation

Complete guide to installing and using the HeyJames real-time bidirectional translation app.

v1.0 Android 8.0+ 17+ Languages

Installation

HeyJames is distributed through the Google Play Store. Follow these steps to get up and running:

1
Open Google Play Store on your Android device (Android 8.0 Oreo or higher required).
2
Search for "HeyJames" or scan the QR code on our download page.
3
Tap Install and accept the required permissions: Microphone, Bluetooth, and optionally Storage (for offline language packs).
4
Connect Bluetooth earbuds to your Android device before launching the app for the first time.
Storage note: The base app is ~80 MB. Optional offline language packs are ~200 MB each and can be downloaded from Settings → Offline Languages.

First Launch

On first launch, HeyJames walks you through a short setup wizard:

  1. Language Selection: Choose the earbud language (fixed to German) and the screen language (any of the 17+ supported languages).
  2. Bluetooth Setup: The app detects connected Bluetooth devices. Select your earbuds from the list.
  3. Microphone Test: Speak a short phrase to confirm the microphone is working correctly.
  4. API Key (Optional): For premium cloud translation quality, enter your Google Cloud Translate API key. The free tier works without a key for up to 500,000 characters/month.

After the wizard, you land on the main translation screen and are ready to begin.

Tip: Keep the app open and your Bluetooth earbuds connected for the best experience. HeyJames keeps the screen on during an active translation session.

Interface Overview

The main screen is divided into three zones:

Status Bar

Shows current mode (Listening / Idle), active language pair, Bluetooth connection status, and connection quality indicator.

Translation Display

Full-screen area showing the most recent translation in large text. The original speech appears smaller above it for context.

Controls

Microphone button (tap to start/stop), history button (view past translations), and settings gear icon.

Status Indicators
Indicator Meaning
● ListeningApp is actively detecting speech
● ProcessingTranslating detected speech
● IdleListening paused, tap mic to resume
● OfflineNo internet; using local fallback models
● BluetoothEarbuds connected and receiving audio

Language Configuration

HeyJames is designed with German as the primary earbud language. The screen language can be any of the 17+ supported languages.

Supported Languages
🇩🇪 German de
🇹🇷 Turkish tr
🇬🇧 English en
🇪🇸 Spanish es
🇫🇷 French fr
🇮🇹 Italian it
🇵🇹 Portuguese pt
🇷🇺 Russian ru
🇸🇦 Arabic ar
🇨🇳 Chinese (Mandarin) zh
🇯🇵 Japanese ja
🇰🇷 Korean ko
🇵🇱 Polish pl
🇳🇱 Dutch nl
🇬🇷 Greek el
🇷🇴 Romanian ro
🇺🇦 Ukrainian uk
🇸🇪 Swedish sv
Changing the Screen Language
  1. Tap the Settings icon (gear) on the main screen.
  2. Select Language Pair.
  3. Choose your new Screen Language from the list.
  4. Tap Save. The change takes effect immediately.
Changing the language pair mid-conversation will clear the current session transcript. Export first if you need to keep the record.

Conversation Modes

Continuous Mode

The app listens non-stop and translates every speech segment automatically. Voice activity detection (VAD) determines when someone has finished speaking.

  • Best for natural flowing conversation
  • No button pressing between turns
  • Higher battery usage
  • Recommended for most use cases

How to activate: Long-press the mic button until it glows green.

Manual (Push-to-Talk) Mode

Hold the mic button to record. Release to trigger translation. The speaker decides exactly when to start and stop each utterance.

  • More control in noisy environments
  • Lower battery usage
  • Useful for one-sided announcements
  • Less natural for back-and-forth

How to activate: Short-press the mic button (default mode on first launch).

You can switch between modes without interrupting an active session. The current mode is shown in the status bar.

Audio Output

HeyJames routes translations for the German speaker exclusively to the connected Bluetooth earbuds, keeping them private from the other party.

Bluetooth Setup
  1. Pair your earbuds with your Android device via Android Settings → Bluetooth.
  2. Open HeyJames. The app will automatically detect connected A2DP Bluetooth devices.
  3. If multiple devices are connected, go to Settings → Audio Output to select the correct earbuds.
TTS Voice Settings
SettingOptionsDefault
TTS EngineGoogle TTS, System TTSGoogle TTS
Speech Rate0.5× – 2.0×1.0×
Pitch0.5× – 2.0×1.0×
Volume0% – 100%80%
FallbackSpeaker / SilentSpeaker
Bluetooth requirements: A2DP profile required for audio output. Hands-Free Profile (HFP) only is not supported for TTS audio delivery.

Visual Display

The translation screen is designed for readability at arm's length — the distance typical for holding a phone between two people in conversation.

Text Size Options
Aa
Small

~24sp — more text visible, slightly harder to read at distance

Aa
Large (Default)

~36sp — recommended for most use cases

Aa
Huge

~56sp — best for noisy or bright environments

Display Modes
  • Dark Mode: White text on dark background — best in low-light environments.
  • Light Mode: Dark text on white background — best in bright daylight outdoors.
  • Auto: Follows Android system dark/light mode setting.

Access display settings via Settings → Display or use the quick toggle in the main screen toolbar.

Settings Reference

Access all settings by tapping the gear icon on the main screen.

General
SettingDescriptionDefault
Earbud LanguageLanguage for Bluetooth audio output (always German)German (de)
Screen LanguageLanguage displayed as large text on screenTurkish (tr)
Default ModeContinuous Listening or Manual (Push-to-Talk)Continuous
Keep Screen OnPrevents screen timeout during active sessionsOn
Auto-Start on LaunchBegins listening immediately when app opensOff
Translation
SettingDescriptionDefault
Translation ProviderGoogle Cloud Translate, DeepL, or LocalGoogle Cloud
API KeyCustom API key for premium translation qualityBuilt-in
Confidence ThresholdMinimum speech recognition confidence to trigger translation0.7
Max Segment LengthMaximum words per translation segment50
Auto Language DetectionAutomatically detect which language is being spokenOn
Audio
SettingDescriptionDefault
Bluetooth DeviceSelect which connected Bluetooth device receives audioAuto-detect
TTS EngineText-to-speech engine for earbud audioGoogle TTS
Speech RateTTS playback speed multiplier1.0×
No-Bluetooth FallbackUse speaker or stay silent when earbuds disconnectSpeaker
Display
SettingDescriptionDefault
Text SizeSmall / Large / HugeLarge
ThemeDark / Light / System AutoSystem Auto
Show Original TextDisplay original speech above translationOn
AnimationText fade-in animation on new translationOn
History & Privacy
SettingDescriptionDefault
Save HistoryStore session transcripts locallyOn
Retention PeriodAutomatically delete history older than N days30 days
Export FormatPlain text (.txt) or JSONPlain text
Clear All HistoryPermanently delete all stored transcripts

Technical Details

This section provides architecture context for developers and technically minded users.

Architecture Overview
Speech Recognition Layer

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.

Translation Layer

Primary: Google Cloud Translation API v3 (Neural Machine Translation). Fallback: ML Kit Translation (on-device, downloadable models). Language detection uses Google Cloud Language Detection.

Audio Output Layer

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.

State Machine

The app's core is a finite state machine with states: IDLELISTENINGPROCESSINGSPEAKINGLISTENING. Each state transition is logged for debugging.

Permissions Required
PermissionPurposeRequired?
RECORD_AUDIOMicrophone access for speech recognitionYes
BLUETOOTH / BLUETOOTH_CONNECTConnect to earbuds for TTS audio routingYes
INTERNETCloud translation and speech recognition APIsRecommended
WRITE_EXTERNAL_STORAGEExport conversation historyOptional
WAKE_LOCKKeep screen on during active sessionsOptional
Data Flow
1 Microphone captures audio at 16 kHz, mono
2 VAD detects end-of-utterance via energy threshold + silence timeout
3 Audio chunk sent to Speech-to-Text API → transcript returned
4 Transcript sent to Translation API → translated text returned
5 UI updates screen with large text; TTS synthesises and routes to earbuds

Troubleshooting & FAQ

  1. Ensure the RECORD_AUDIO permission is granted in Android Settings → Apps → HeyJames → Permissions.
  2. Check that you're not too far from the phone — the microphone captures best at 30–60 cm.
  3. Reduce background noise if possible. Try Manual mode in loud environments.
  4. Check your internet connection — cloud speech recognition requires network access.
  5. Try restarting the app and reconnecting Bluetooth earbuds.

  1. Confirm your earbuds are connected in Android's Bluetooth settings (not just paired).
  2. Open HeyJames Settings → Audio Output and ensure the correct device is selected.
  3. Check that No-Bluetooth Fallback is set to Speaker to hear translations if earbuds disconnect.
  4. Ensure your earbuds support A2DP profile (not just HFP). Most modern earbuds do.
  5. Increase TTS Volume in Settings → Audio.

  • Use a fast Wi-Fi connection instead of mobile data.
  • Ensure you're using the Google Cloud translation provider (not Local/Offline).
  • Reduce TTS Speech Rate in Settings → Audio to allow faster audio start (paradoxically, slower speech = less buffering).
  • In Manual mode, keep utterances short — under 15 words translates faster than long sentences.

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:

  • Use in-ear earbuds with good passive isolation.
  • Lower TTS volume to reduce acoustic leakage.
  • Enable Echo Suppression in Settings → Advanced (experimental).

Yes, with limitations. HeyJames supports offline mode using on-device ML Kit models. To prepare:

  1. Go to Settings → Offline Languages.
  2. Download the language pack for your screen language (~200 MB per language).
  3. The app will automatically switch to offline mode when no internet is available.

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.

  • HeyJames itself does not store audio recordings.
  • Text transcripts are stored locally on your device only.
  • No conversation data is sent to HeyJames servers.
  • Use Offline Mode if you require complete privacy — no data leaves the device.