- Fix AudioRecordingService ACTION_STOP to use com.pedshub.scribe - Fix deprecated stopForeground(true) to STOP_FOREGROUND_REMOVE - Fix launcher.js testServer: prevent double callback, fix onerror always reporting success (now correctly fails on unreachable servers) - Update service comment from TWA to Capacitor |
||
|---|---|---|
| .. | ||
| android | ||
| ios | ||
| node_modules | ||
| src | ||
| capacitor.config.json | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
PedScribe Mobile App
Native mobile wrapper for Pediatric AI Scribe using Capacitor. Provides background audio recording that survives screen lock on both iOS and Android.
Features
- Background recording (screen lock safe)
- Configurable server URL (supports self-hosted instances)
- Android foreground service with wake lock for reliable recording
- iOS background audio mode
- App Store and Play Store ready
Prerequisites
- Node.js 18+
- Android Studio (for Android builds)
- Xcode 15+ (for iOS builds, macOS only)
- Apple Developer account ($99/yr for App Store)
- Google Play Developer account ($25 one-time)
Setup
cd mobile
npm install
npx cap sync
Build Android
# Open in Android Studio
npx cap open android
# Or build APK directly
cd android && ./gradlew assembleRelease
The APK will be at android/app/build/outputs/apk/release/app-release.apk
Build iOS
# Open in Xcode (macOS only)
npx cap open ios
# Build and sign in Xcode
# Product > Archive > Distribute
How It Works
- App launches with a local launcher page
- User enters their PedScribe server URL (default: app.pedshub.com)
- URL is saved to localStorage for future launches
- App navigates to the remote web app
- Web app runs inside the native WebView with full native API access
Background Recording
Android: Uses AudioRecordingService — a foreground service that acquires a wake lock and shows a persistent notification during recording. The CPU stays active even when the screen is off.
iOS: Uses UIBackgroundModes: audio in Info.plist, which allows the WKWebView to continue audio capture when the app is backgrounded.
App Structure
mobile/
capacitor.config.json # Capacitor configuration
package.json # Dependencies
src/
index.html # Launcher page (server URL config)
launcher.js # Auto-redirect logic
launcher.css # Launcher styles
android/ # Android native project
app/src/main/
java/com/pedshub/scribe/
MainActivity.java
AudioRecordingService.java
AndroidManifest.xml
ios/ # iOS native project
App/App/
Info.plist # Background audio + microphone permission
Changing the Default Server
Edit src/launcher.js and change the DEFAULT_URL variable:
var DEFAULT_URL = 'https://your-server.example.com';
Users can also change the server URL at any time from the launcher screen.