Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

To keep speech recognition on the device, your app has to request local processing explicitly and then confirm that the platform service can honor the request. On Apple platforms, set requiresOnDeviceRecognition to true only after checking that supportsOnDeviceRecognition is also true. On Android, call isOnDeviceRecognitionAvailable(context) and create the recognizer with createOnDeviceSpeechRecognizer(context), both of which were added in API level 31. If either check fails, show an unavailable state and stop. Do not quietly send the audio to a server instead.

The default paths do send audio off the device. Apple’s standard SFSpeechRecognizer processing captures speech and sends it to Apple servers, and Android’s generic SpeechRecognizer is documented as likely to stream audio to remote servers. A privacy requirement therefore has to be enforced in code, not assumed from the platform.

Why the default recognition paths are not local

Neither platform’s standard speech API should be treated as on-device by default.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Apple: Apple’s Asking Permission to Use Speech Recognition guide describes the standard SFSpeechRecognizer flow as capturing speech and sending audio to Apple servers. The app must supply an NSSpeechRecognitionUsageDescription value and request authorization before recognition starts.
  • Android: The SpeechRecognizer API reference states: “The implementation of this API is likely to stream audio to remote servers to perform speech recognition.” The wording is “likely,” so your code should not assume a particular device or service behaves otherwise without checking.

Apple platforms: the SFSpeechRecognizer path

1. Declare the usage description and request authorization

  1. Add NSSpeechRecognitionUsageDescription to the app’s Info.plist. The string should name the specific purpose, for example “Transcribes your dictation on this device.” Only write this if the app really does what the string says.
    <key>NSSpeechRecognitionUsageDescription</key>
    <string>Transcribes your dictation on this device.</string>
  2. Call SFSpeechRecognizer.requestAuthorization and handle the result before creating any request.
  3. Create the recognizer for the locale the user actually speaks. Check that it is available before you begin.

2. Check capability, then set the request flag

The request property is necessary but not sufficient. Apple’s requiresOnDeviceRecognition documentation says: “Set this property to true to prevent an SFSpeechRecognitionRequest from sending audio over the network.” It is honored only when the recognizer supports on-device recognition, which the supportsOnDeviceRecognition property reports. That property is documented as “A Boolean value that indicates whether the speech recognizer can operate without network access.”

#1 Best Overall
Sale
Motorola Moto g - 2026 | Unlocked | Made for US 4/128GB | 50MP Camera | Pantone Slipstream, Cellular_Phone
  • 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.****
import Speech

func makeLocalRequest(locale: Locale) -> (SFSpeechRecognizer, SFSpeechAudioBufferRecognitionRequest)? {
    guard let recognizer = SFSpeechRecognizer(locale: locale),
          recognizer.isAvailable,
          recognizer.supportsOnDeviceRecognition else {
        return nil
    }
    let request = SFSpeechAudioBufferRecognitionRequest()
    request.requiresOnDeviceRecognition = true
    return (recognizer, request)
}

The function returns nothing when local recognition cannot be guaranteed, so the calling code must handle the missing case. It should not fall back to a request without the flag.

3. Account for the accuracy trade-off and the deployment target

Apple notes that on-device requests may be less accurate than server-based ones. The reviewed Apple pages do not give a numeric accuracy comparison, so test your own languages and vocabulary before you rely on local results for a given feature.

Rank #2
Sale
Samsung Galaxy A17 5G Smart Phone 128GB US 1 Yr Manufacturer Warranty Black
  • 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.

The pages reviewed for this article do not state a minimum iOS, iPadOS, or macOS version for these properties. Check the availability annotations on each symbol in the current Apple documentation and set your deployment target to match.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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 sources reviewed here do not establish SpeechAnalyzer’s OS version or device requirements, so confirm them in Apple’s current documentation before you choose it.

Rank #3
Samsung Galaxy A16 5G 128GB Cell Phone, Unlocked Android Smartphone, Large AMOLED Display, Durable Design, Super Fast Charging, Expandable Storage, US Version, 2025, Blue Black (Renewed)
  • 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.

Android: the dedicated on-device recognizer

1. Check availability, then create the recognizer

The on-device methods were added in API level 31 (Android 12). On a lower minSdkVersion, the call to these methods must be guarded, or the app can fail at runtime on older devices. Creation throws UnsupportedOperationException when the on-device service is not available, so catch it and treat the result as unavailable.

import android.content.Context
import android.os.Build
import android.speech.SpeechRecognizer

fun createLocalRecognizer(context: Context): SpeechRecognizer? {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return null
    if (!SpeechRecognizer.isOnDeviceRecognitionAvailable(context)) return null
    return try {
        SpeechRecognizer.createOnDeviceSpeechRecognizer(context)
    } catch (e: UnsupportedOperationException) {
        null
    }
}

Do not fall back to SpeechRecognizer.createSpeechRecognizer(context) when this function returns null. That call goes to the generic implementation that the reference describes as likely to stream audio to remote servers.

Rank #4
Sale
Samsung Galaxy A17 5G Smart Phone 128GB, US 1 Yr Manufacturer Warranty Blue
  • 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.

2. Permissions, threading and lifecycle

  • Declare android.permission.RECORD_AUDIO in the manifest and request it at runtime before you start listening.
  • Register a RecognitionListener on the recognizer before you send it any commands.
  • Call the API from the main thread, as the reference requires.
  • Call destroy() when recognition is finished so the service is released.

3. Package visibility on Android 11 and later

The reference documents a manifest <queries> declaration for interacting with a recognition service in apps that target Android 11 (API level 30). Confirm that requirement against your target SDK and your integration before adding it to every project as a standard step.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Comparing the two platforms

Area Apple (SFSpeechRecognizer) Android (SpeechRecognizer)
Enforcement mechanism Set requiresOnDeviceRecognition to true on the request; honored only if the recognizer supports it Create the recognizer with createOnDeviceSpeechRecognizer(context) instead of the generic constructor
Availability check supportsOnDeviceRecognition on the recognizer, plus recognizer availability for the chosen locale isOnDeviceRecognitionAvailable(context); API level 31 and later
Permission and setup NSSpeechRecognitionUsageDescription and speech authorization RECORD_AUDIO at runtime; <queries> declaration for API 30 targets where applicable
Failure behavior The flag is ignored unless the recognizer supports on-device recognition, so the app must check the property first Creation throws UnsupportedOperationException when the service is unavailable
Documented trade-off On-device requests may be less accurate (Apple documentation) No accuracy trade-off stated in the reviewed Android reference

Availability in both cases depends on the OS version, the device, the language, and any installed recognition service. The platform references establish API behavior, not whether a particular language works offline on a particular phone, so the runtime check is the authority.

Best Value
Tracfone Motorola Moto G 2025, 64GB, Saphire Blue (Locked to
  • 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.

When on-device recognition is unavailable

Use this sequence whenever either platform reports that local recognition is not possible:

  1. Identify the reason. The cause may be the OS version, the device, the selected locale, or the installed recognition service. Record the reason in your logs without logging the audio or transcript.
  2. Show an unavailable state. Tell the user that speech input cannot run on the device for this language or device, and leave the voice feature disabled until the user acts.
  3. Offer a network-backed option only with consent. If you want to offer server-based recognition, ask first and say that audio will leave the device. This is a design recommendation based on the explicit support checks and the documented remote behavior, not a platform requirement.
  4. Never switch silently. Do not start a request without the on-device flag or the on-device recognizer because the local path failed.

Making the privacy claim match the code

  • Describe what the code enforces. For example, say that speech is processed on the device when the platform reports local support, and that the app does not start recognition otherwise.
  • Avoid saying that the phone never sends voice data. That claim is broader than the checks guarantee.
  • Do not imply that asking for ordinary system recognition makes processing local. On Apple platforms the standard path sends audio to Apple servers, and on Android the generic implementation is likely to stream audio remotely.
  • Apple’s SFSpeechRecognizer reference advises against using speech recognition on private or sensitive information, including passwords, health data, or financial data. On-device processing does not change that advice, so explain the specific data and purpose to users.

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.