What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Platform speech recognition does not stay on the phone by default. The generic recognition paths on iOS and Android can send audio to a server, so a privacy requirement only holds if your code asks for local processing, confirms the device can provide it, and stops with a visible message when it cannot. This guide shows how to do that in a cross-platform app, with the iOS and Android steps kept separate. The platform references reviewed for this article are dated October 2026. Service availability depends on OS version, device, language, and installed recognition services, so the checks below run at runtime rather than being assumed at build time.
What the default path does with your audio
On Apple platforms, Apple’s authorization guide describes standard SFSpeechRecognizer processing as capturing speech and sending audio to Apple servers (Asking Permission to Use Speech Recognition). On Android, the SpeechRecognizer reference states that its generic implementation “is likely to stream audio to remote servers to perform speech recognition” (SpeechRecognizer API reference). Neither platform makes local processing the default for a plain recognition request, so your app has to ask for it explicitly.
As an Amazon Associate I earn from qualifying purchases.
iOS: enforce local recognition on the request
Declare the usage description and request authorization
- Add the
NSSpeechRecognitionUsageDescriptionkey toInfo.plistwith a sentence that says what the speech is used for. Apple requires this value before the authorization prompt can appear. - Call
SFSpeechRecognizer.requestAuthorizationand proceed only when the status is.authorized. - Create a recognizer for the locale your feature needs and check its
isAvailableproperty. A recognizer can exist for a locale without being usable at the moment.
Check capability before setting the request flag
Apple documents two properties that work together. supportsOnDeviceRecognition is a Boolean that “indicates whether the speech recognizer can operate without network access” (supportsOnDeviceRecognition). requiresOnDeviceRecognition on the request should be set to true “to prevent an SFSpeechRecognitionRequest from sending audio over the network” (requiresOnDeviceRecognition). The request setting is honored only when the recognizer supports on-device recognition, so the capability check must come first. The following function returns no request when local processing is unavailable, which lets the caller show an unavailable state:
Recommended Free Tools
import Speech
func makeOnDeviceRequest(locale: Locale) -> SFSpeechAudioBufferRecognitionRequest? {
guard let recognizer = SFSpeechRecognizer(locale: locale),
recognizer.isAvailable,
recognizer.supportsOnDeviceRecognition else {
return nil
}
let request = SFSpeechAudioBufferRecognitionRequest()
request.requiresOnDeviceRecognition = true
request.shouldReportPartialResults = true
return request
}
The recognizer must stay alive for the life of the recognition task, and the function above only builds the request. Start the task with the same recognizer instance that passed the capability check.
#1 Best Overall
- Universal unlocked. Compatible with all major U.S. carriers, including Verizon, AT&T, T-Mobile and other prepaid carriers.
- Super-bright, super-smooth 6.7" display. See your screen clearly even outdoors in sunlight, and enjoy seamless views with a fast-refreshing 120Hz display.*
- AI-powered camera system. Take stunning photos in any light with the 50MP camera**, look your best with a 32MP selfie cam*****, and capture extreme close-ups.
- Superfast 5G performance. Unleash your entertainment at 5G speed*** with the MediaTek Dimensity 6300 chipset and up to 12GB of RAM with RAM Boost****.
- Long-lasting battery + TurboPower charging. Power through day after day with a 5200mAh battery, then get hours of power in just minutes.****
Deployment target and SpeechAnalyzer
The Apple pages reviewed do not establish a minimum iOS version for these two properties in the form shown here. Check the availability annotations in the current Speech framework documentation against your deployment target before you ship. Apple’s authorization guide also distinguishes the SFSpeechRecognizer flow from SpeechAnalyzer transcriber modules, which it says do not send users’ voice audio to Apple servers. The version and availability requirements for SpeechAnalyzer were not established in the pages reviewed, so confirm them in Apple’s current documentation before you plan around it.
Accuracy and sensitive content
Apple’s property documentation warns that on-device requests may be less accurate than server-based ones. Test the locales and vocabulary your users actually speak before you promise a level of quality. Apple’s SFSpeechRecognizer reference also advises against performing recognition on private or sensitive information, including passwords, health data, and financial data. Keeping audio on the device is not a reason to route those inputs through speech recognition.
Rank #2
- YOUR CONTENT, SUPER SMOOTH: The ultra-clear 6.7" FHD+ Super AMOLED display of Galaxy A17 5G helps bring your content to life, whether you're scrolling through recipes or video chatting with loved ones.¹
- LIVE FAST. CHARGE FASTER: Focus more on the moment and less on your battery percentage with Galaxy A17 5G. Super Fast Charging powers up your battery so you can get back to life sooner.²
- MEMORIES MADE PICTURE PERFECT: Capture every angle in stunning clarity, from wide family photos to close-ups of friends, with the triple-lens camera on Galaxy A17 5G.
- NEED MORE STORAGE? WE HAVE YOU COVERED: With an improved 2TB of expandable storage, Galaxy A17 5G makes it easy to keep cherished photos, videos and important files readily accessible whenever you need them.³
- BUILT TO LAST: With an improved IP54 rating, Galaxy A17 5G is even more durable than before.⁴ It’s built to resist splashes and dust and comes with a stronger yet slimmer Gorilla Glass Victus front and Glass Fiber Reinforced Polymer back.
Android: use the on-device recognizer factory
Gate on API level 31
The on-device methods, isOnDeviceRecognitionAvailable(context) and createOnDeviceSpeechRecognizer(context), were added in API level 31 (Android 12). If your minSdk is lower, you need a version branch. The reference documents creation as throwing UnsupportedOperationException when the on-device service is unavailable, so treat that case as a normal unavailable state rather than a crash.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesDeclare the microphone permission
SpeechRecognizer requires RECORD_AUDIO. Declare it in the manifest and request it at runtime before you start listening:
Rank #3
- Charger NOT Included, 6.7" Super AMOLED FHD+, 90Hz Refresh Rate, 385 ppi, 800 nits (HBM), 1080x2340px, 5000mAh Battery
- 128GB, 4GB RAM, microSDXC, Exynos 1330 (5nm), Octa-Core, Mali-G68 MP2 or Mali-G57 MC2 GPU
- Rear Camera: 50MP, f/1.8 (wide) + 5MP, f/2.2 (ultrawide) + 2MP, f/2.4 (macro), LED flash, panorama, HDR; Front Camera: 13MP, f/2.0, Android 14, up to 6 major Android upgrades, One UI 6.1
- 3G: HSDPA 850/900/1700(AWS)/1900/2100; 4G LTE: 1/2/3/4/5/7/12/13/14/20/25/26/28/29/30/38/39/40/41/48/66/71, 5G: 2/5/25/41/66/71/77/78 SA/NSA/Sub6/mmWave - Nano-SIM + eSIM
- US Model – Global Connectivity – Compatible with Most GSM Carriers like T-Mobile, AT&T, MetroPCS, etc. Will Also work with CDMA Carriers Such as Verizon, Straight Talk.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
The reference also documents a manifest <queries> declaration for interacting with a recognition service in apps that target Android 11 (API level 30). Confirm whether your target SDK and integration need it before adding it to every project.
Create, listen, and release
The following function checks availability first, creates the on-device recognizer, registers the listener before sending any command, and returns null when local recognition cannot be used:
Rank #4
- YOUR CONTENT, SUPER SMOOTH: The ultra-clear 6.7" FHD+ Super AMOLED display of Galaxy A17 5G helps bring your content to life, whether you're scrolling through recipes or video chatting with loved ones.¹
- LIVE FAST. CHARGE FASTER: Focus more on the moment and less on your battery percentage with Galaxy A17 5G. Super Fast Charging powers up your battery so you can get back to life sooner.²
- MEMORIES MADE PICTURE PERFECT: Capture every angle in stunning clarity, from wide family photos to close-ups of friends, with the triple-lens camera on Galaxy A17 5G.
- NEED MORE STORAGE? WE HAVE YOU COVERED: With an improved 2TB of expandable storage, Galaxy A17 5G makes it easy to keep cherished photos, videos and important files readily accessible whenever you need them.³
- BUILT TO LAST: With an improved IP54 rating, Galaxy A17 5G is even more durable than before.⁴ It’s built to resist splashes and dust and comes with a stronger yet slimmer Gorilla Glass Victus front and Glass Fiber Reinforced Polymer back.
import android.content.Context
import android.content.Intent
import android.os.Build
import android.speech.RecognitionListener
import android.speech.RecognizerIntent
import android.speech.SpeechRecognizer
fun startOnDeviceRecognition(context: Context, listener: RecognitionListener): SpeechRecognizer? {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return null
if (!SpeechRecognizer.isOnDeviceRecognitionAvailable(context)) return null
val recognizer = try {
SpeechRecognizer.createOnDeviceSpeechRecognizer(context)
} catch (e: UnsupportedOperationException) {
return null
}
recognizer.setRecognitionListener(listener)
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
recognizer.startListening(intent)
return recognizer
}
Call the recognizer’s methods on the main thread, as the API requires, and call destroy() when the session ends. Keeping a recognizer instance alive after a session wastes resources and can hold on to the service.
Comparing the two paths
| Concern | iOS (SFSpeechRecognizer) | Android (SpeechRecognizer) |
|---|---|---|
| Enforcement mechanism | Set requiresOnDeviceRecognition on the request; honored only if the recognizer supports it |
Create the recognizer with createOnDeviceSpeechRecognizer(context) |
| Availability check | isAvailable on the recognizer for the locale, and supportsOnDeviceRecognition |
isOnDeviceRecognitionAvailable(context) |
| Minimum version named in reviewed pages | Not stated in the reviewed pages for these properties; check current Apple documentation | API level 31 for the on-device methods |
| Permission and setup | Speech authorization and NSSpeechRecognitionUsageDescription |
RECORD_AUDIO; <queries> for apps targeting API level 30, to be confirmed |
| Failure signal | Recognizer unavailable, or no on-device support, so you build no on-device request | isOnDeviceRecognitionAvailable returns false, or creation throws UnsupportedOperationException |
| Documented trade-off | On-device requests may be less accurate (Apple) | Not stated in the reviewed Android reference |
When on-device recognition is unavailable
Decide the fallback rule before you write the feature, because the platform checks only tell you that local recognition failed. They do not decide what your app should do next. The following sequence keeps the privacy requirement enforceable:
Best Value
- Carrier: This phone is locked to Tracfone, which means this device can only be used on the Tracfone wireless network. Tracfone plan required, activating is easy, just 3 steps.
- DISPLAY: Immersive viewing on a 6.7-inch super-bright 120Hz display with powerful stereo speakers and Bass Boost for cinematic entertainment.
- CAMERA SYSTEM: Advanced 50MP Quad Pixel camera captures sharp, detailed photos and videos in any lighting condition
- PERFORMANCE: Lightning-fast 5G connectivity paired with a powerful processor and RAM Boost for smooth multitasking.
- BATTERY LIFE: Long-lasting 5000mAh battery with TurboPower charging technology delivers hours of power in minutes.
- Run the capability check before any audio is captured.
- If the check fails, show a state that names the reason in plain terms, such as an unsupported language or a device that cannot run local recognition.
- Do not start a server-based recognition session silently.
- If you want a network-backed alternative, ask the user first and state what audio will be sent and to whom.
This sequence follows from the platforms’ explicit support checks and their documented remote processing. It is an implementation choice, not a rule the platforms impose on your interface.
Writing an accurate privacy claim
Your privacy text should describe what the code enforces. The following table separates the claims the code can support from the ones it cannot:
- Supportable: “Speech is processed on this device when local recognition is available. If it is not available, the feature is disabled and no audio is sent.”
- Not supportable: “Your voice never leaves your phone,” or “speech recognition is private,” because the claim ignores the unavailable states, the accuracy trade-off, and the content types that should not be spoken into the feature at all.
Limit claims to the locales and devices you actually verified. Platform availability varies, so an unverified language should be described as unavailable rather than assumed to work offline.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




