{"package_name":"com.android.fmradio","label":"FM Radio","device_count":23,"observation_count":34,"user_facing_count":6,"first_seen":"2025-05-08T17:55:42Z","last_seen":"2026-08-24T06:38:23Z","guidance":{"summary":"The AOSP \"FM Radio\" app. It is a stock Android application, kept in the AOSP tree at packages/apps/FMRadio, whose manifest declares the package name com.android.fmradio and version 2.0. It tunes and plays broadcast FM through the device's FM receiver: the manifest requests ACCESS_FM_RADIO, MODIFY_AUDIO_ROUTING, RECORD_AUDIO and related audio permissions, and the project ships a jni/fmr native directory through which the app reaches the tuner. On most devices wired headphones act as the aerial: FmService treats the headset lead as a \"long antenna\", checks antenna availability by asking the audio manager whether a wired headset is connected, and switches antenna type when the headset is plugged or unplugged. The same code also allows for a \"short antenna\" built into the phone, so headphones are the usual requirement rather than a universal one, and the native call can report that a device does not support the switch at all.\n\nIt is a plain media app with no platform role, and it is not a Google app. Our signer data covers only a minority of the devices we have recorded it on, but on those it is signed by the device maker's own framework-signing key rather than by Google, which is what you would expect of a ROM-resident app. The devices carrying it are mostly budget and rugged handsets from makers such as Blackview, DOOGEE, OUKITEL, Ulefone, Unihertz, itel, Lenovo, Motorola, realme and OPPO. It appears in the launcher on some of those devices.\n\nVersion note: the upstream AOSP project is effectively frozen. Its manifest carries a 2014 copyright and targets SDK 21, and the newest commit on the main branch is from May 2016. What ships today is therefore a vendor-maintained fork rather than a current AOSP build: copies in our sample still report version 2.0 but have been rebuilt against target SDKs from 27 to 34, and are recorded on devices from API 27 through API 35 (Android 8.1 to Android 15). We could not source any newer upstream successor, so treat behaviour as vendor-specific rather than standard across devices.\n\nFor Android Enterprise, EMM and kiosk use no enrolment, policy or connectivity role was identified for it: it is a self-contained media app. On a work device it is a consumer distraction that can also record audio, so disabling or hiding it is a sensible default unless FM reception is genuinely part of the use case, which does happen on some rugged and field devices. Because what ships is a vendor fork rather than the upstream build, test on the exact model before rolling a disable out widely.","safe_to_disable":"safe","sources":[{"title":"FMRadio AndroidManifest.xml - Android (platform/packages/apps/FMRadio)","url":"https://android.googlesource.com/platform/packages/apps/FMRadio/+/refs/heads/main/AndroidManifest.xml"},{"title":"FmService.java (antenna and headset handling) - Android (platform/packages/apps/FMRadio)","url":"https://android.googlesource.com/platform/packages/apps/FMRadio/+/refs/heads/main/src/com/android/fmradio/FmService.java"},{"title":"FMRadio jni directory - Android (platform/packages/apps/FMRadio)","url":"https://android.googlesource.com/platform/packages/apps/FMRadio/+/refs/heads/main/jni/"},{"title":"FMRadio commit log, main branch - Android (platform/packages/apps/FMRadio)","url":"https://android.googlesource.com/platform/packages/apps/FMRadio/+log/refs/heads/main"},{"title":"Package provenance for com.android.fmradio - Android System App Database","url":"https://sysapps.bayton.org/api/packages/com.android.fmradio"}],"last_verified":"2026-09-23T00:00:00Z"},"labels":[{"label":"FM Radio","locale":"en-us","count":21},{"label":"FM Radio","locale":"en-gb","count":9},{"label":"FM Radio","locale":"en","count":2},{"label":"FM Radio","locale":"en-GB","count":2},{"label":"FM Radio","locale":"en-US","count":2},{"label":"FM Radio","locale":"en-lk","count":1},{"label":"FM Radio","locale":"en-za-u-fw-mon-mu-celsius","count":1},{"label":"Radio FM","locale":"it-it","count":1},{"label":"วิทยุ FM","locale":"th-th","count":1}],"seen_on_pagination":{"paging_mode":"complete","limit":23,"offset":0,"has_more":false,"next_offset":null,"after":null,"next_after":null,"total":23},"seen_on":[{"device_id":13,"make":"A-gold","model":"Titan","os_api":"28","observation_count":5,"user_facing_count":0,"last_seen":"2025-06-15T20:42:07Z"},{"device_id":60,"make":"ALCommon","model":"ALCommon","os_api":"35","observation_count":1,"user_facing_count":0,"last_seen":"2025-06-20T14:29:09Z"},{"device_id":4840,"make":"ANT DAO TECHNOLOGY LIMITED","model":"B3","os_api":"34","observation_count":1,"user_facing_count":0,"last_seen":"2026-08-18T17:19:16Z"},{"device_id":163,"make":"Blackview","model":"VARG","os_api":"30","observation_count":1,"user_facing_count":0,"last_seen":"2025-09-01T13:45:53Z"},{"device_id":172,"make":"DOOGEE","model":"S41 Max","os_api":"33","observation_count":2,"user_facing_count":0,"last_seen":"2025-10-03T12:01:00Z"},{"device_id":3435,"make":"fezawio","model":"F11_V_US","os_api":"35","observation_count":1,"user_facing_count":0,"last_seen":"2026-07-14T19:53:47Z"},{"device_id":185,"make":"HOTWAV","model":"TAB R9 Pro","os_api":"34","observation_count":1,"user_facing_count":0,"last_seen":"2025-09-18T12:19:10Z"},{"device_id":262,"make":"ITEL MOBILE LIMITED","model":"itel A16 Plus","os_api":"27","observation_count":1,"user_facing_count":1,"last_seen":"2025-12-06T06:29:42Z","provenance":{"classification":"oem","vendor":"ITEL MOBILE LIMITED","sha256":"5304915c4bb7baca28776231993996fde1baffcbbe6500fb0fc7f2d3a2888cb7"}},{"device_id":106,"make":"LENOVO","model":"Lenovo TB-7306F","os_api":"30","observation_count":1,"user_facing_count":0,"last_seen":"2025-07-19T15:27:54Z"},{"device_id":28,"make":"LENOVO","model":"Lenovo TB-X6C6NBF","os_api":"31","observation_count":1,"user_facing_count":1,"last_seen":"2025-05-15T11:09:01Z"},{"device_id":273,"make":"motorola","model":"moto g14","os_api":"33","observation_count":1,"user_facing_count":0,"last_seen":"2025-12-19T12:15:08Z"},{"device_id":21,"make":"NUU","model":"N5501L","os_api":"27","observation_count":3,"user_facing_count":0,"last_seen":"2025-08-21T16:28:46Z"},{"device_id":96,"make":"OPPO","model":"CPH2591","os_api":"35","observation_count":1,"user_facing_count":1,"last_seen":"2025-07-10T09:11:23Z"},{"device_id":18,"make":"OUKITEL","model":"WP100 TITAN","os_api":"34","observation_count":2,"user_facing_count":0,"last_seen":"2025-07-25T09:29:46Z"},{"device_id":263,"make":"OUKITEL","model":"WP100 TITAN","os_api":"35","observation_count":1,"user_facing_count":0,"last_seen":"2025-12-06T08:06:01Z"},{"device_id":363,"make":"OUKITEL","model":"WP28 E","os_api":"34","observation_count":1,"user_facing_count":1,"last_seen":"2026-08-24T06:38:23Z","provenance":{"classification":"oem","vendor":"OUKITEL","sha256":"40a9831caed40b2e6f72afb723c37f20c63de468c12699b32a1bb4ff738c2498"}},{"device_id":248,"make":"OUKITEL","model":"WP60","os_api":"35","observation_count":3,"user_facing_count":0,"last_seen":"2025-12-09T21:40:57Z"},{"device_id":148,"make":"realme","model":"RMX2001","os_api":"30","observation_count":1,"user_facing_count":1,"last_seen":"2025-08-21T05:31:41Z"},{"device_id":330,"make":"revoview","model":"S6518","os_api":"30","observation_count":1,"user_facing_count":0,"last_seen":"2026-03-30T15:33:07Z"},{"device_id":105,"make":"SMT_HK","model":"Helium Pro","os_api":"31","observation_count":1,"user_facing_count":1,"last_seen":"2025-07-19T02:48:07Z"},{"device_id":126,"make":"SMT_HK","model":"YUMPINGO_1","os_api":"28","observation_count":1,"user_facing_count":0,"last_seen":"2025-08-09T20:31:03Z"},{"device_id":178,"make":"Ulefone","model":"Power Armor X11 Pro","os_api":"31","observation_count":1,"user_facing_count":0,"last_seen":"2025-09-15T05:09:46Z"},{"device_id":267,"make":"Unihertz","model":"Titan 2","os_api":"35","observation_count":2,"user_facing_count":0,"last_seen":"2026-01-05T18:10:15Z"}],"intelligence":{"insights":["Signed by the device maker's own signing key (OUKITEL), so it is an OEM preinstall, but 2 different certificates appear across the fleet, so OEMs ship their own builds of it. It also signs the Android framework, so it is a platform-level key on its device(s). Inferred from the certificate appearing only on OUKITEL devices (85 packages, 85 observations).","Its largest observed manifest declares 24 permissions: 4 runtime (user-granted), 12 signature or system-level, 6 install-time and 2 vendor or uncatalogued. The signature/system share marks it as a privileged component, not an ordinary app."],"device_profiles":5,"signer_count":2,"signer_consistent":false,"max_permission_count":24,"min_size_bytes":688705,"max_size_bytes":1085709,"min_target_sdk":27,"max_target_sdk":34,"oldest_version":"2.0","newest_version":"2.0","has_third_party_preinstall":false,"genuine_third_party":false,"play_eligible_count":0,"signers":[{"sha256":"40a9831caed40b2e6f72afb723c37f20c63de468c12699b32a1bb4ff738c2498","classification":"oem","vendor":"OUKITEL","observation_count":1,"makes":["OUKITEL"],"signs_framework":true,"global_make_count":1,"global_package_count":85,"global_observation_count":85},{"sha256":"5304915c4bb7baca28776231993996fde1baffcbbe6500fb0fc7f2d3a2888cb7","classification":"oem","vendor":"ITEL MOBILE LIMITED","observation_count":1,"makes":["ITEL MOBILE LIMITED"],"signs_framework":true,"global_make_count":1,"global_package_count":69,"global_observation_count":69}],"permissions":[{"permission":"android.permission.ACCESS_BROADCAST_RADIO","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.ACCESS_MOCK_LOCATION","description":"Signature-level system permission, for platform-signed apps.","official":false},{"permission":"android.permission.BLUETOOTH","description":"Allows the app to view the configuration of the Bluetooth on the phone, and to make and accept connections with paired devices.","official":true},{"permission":"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS","description":"Signature or privileged system permission.","official":false,"doc":{"title":"Behavior changes: all apps","url":"https://developer.android.com/about/versions/12/behavior-changes-all"}},{"permission":"android.permission.CAPTURE_AUDIO_HOTWORD","description":"Signature or privileged system permission.","official":false,"doc":{"title":"Sharing audio input","url":"https://developer.android.com/media/platform/sharing-audio-input"}},{"permission":"android.permission.CAPTURE_AUDIO_OUTPUT","description":"Signature or privileged system permission.","official":false,"doc":{"title":"Sharing audio input","url":"https://developer.android.com/media/platform/sharing-audio-input"}},{"permission":"android.permission.CHANGE_CONFIGURATION","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.FOREGROUND_SERVICE","description":"Allows the app to make use of foreground services.","official":true},{"permission":"android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK","description":"Allows the app to make use of foreground services with the type \"mediaPlayback\"","official":true},{"permission":"android.permission.INTERACT_ACROSS_USERS","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.INTERNET","description":"Allows the app to create network sockets and use custom network protocols. The browser and other applications provide means to send data to the internet, so this permission is not required to send data to the internet.","official":true},{"permission":"android.permission.MANAGE_USERS","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.MODIFY_AUDIO_ROUTING","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.MODIFY_AUDIO_SETTINGS","description":"Allows the app to modify global audio settings such as volume and which speaker is used for output.","official":true},{"permission":"android.permission.MOUNT_UNMOUNT_FILESYSTEMS","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.POST_NOTIFICATIONS","description":"Allows the app to show notifications","official":true},{"permission":"android.permission.READ_MEDIA_AUDIO","description":"Allows the app to read audio files from your shared storage.","official":true},{"permission":"android.permission.READ_PHONE_STATE","description":"Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active, and the remote number connected by a call.","official":true},{"permission":"android.permission.RECORD_AUDIO","description":"This app can record audio using the microphone while the app is in use.","official":true},{"permission":"android.permission.SET_MEDIA_KEY_LISTENER","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND","description":"Signature or privileged system permission.","official":false},{"permission":"android.permission.WAKE_LOCK","description":"Allows the app to prevent the phone from going to sleep.","official":true},{"permission":"com.android.fmradio.permission.FmMainActivity","official":false},{"permission":"com.sprd.engineermode.ENG_BROADCAST","official":false}]},"previews":{"labels":{"kind":"preview","limit":60,"total":9,"truncated":false,"collection_url":"/api/packages/com.android.fmradio/labels"}},"collections":{"labels":"/api/packages/com.android.fmradio/labels","seen_on":"/api/packages/com.android.fmradio/seen_on"}}
