SDK Version: v0.23
React Native Version: RN0.72
Description:
We would like to suppress D-pad / navigation click sounds on our overlay during playback, it seems like the navigation sounds are interfering with audio playback and causing discontinuity between the audio and video tracks.
@amazon-devices/keplerscript-audio-lib documents AudioManager.disableSystemSoundsAsync() / enableSystemSoundsAsync() as the way to do this. The method-level JSDoc for disableSystemSoundsAsync() does not list a required privilege, does not say the API is system-app-only, and does not document -9 / STATUS_PERMISSION_DENIED as a return value. Documented returns are only:
0STATUS_NO_ERROR-5STATUS_DEAD_OBJECT-8STATUS_INVALID_OPERATION
The library README also lists “System sound management” as a feature for React Native for Vega apps, and setup only asks for audio services (com.amazon.audio.control, com.amazon.audio.stream, com.amazon.audio.system) — not com.amazon.audio.privilege.settings.control.
Other AudioManager methods (e.g. setVolumeAsync, disableUsageAsync) do explicitly say they require com.amazon.audio.privilege.settings.control and are restricted to Kepler system applications.
At runtime, disableSystemSoundsAsync() still returns -9 (STATUS_PERMISSION_DENIED) for our app, both before and after declaring that privilege in manifest.toml and doing a clean rebuild/reinstall.
This looks like a docs vs native ACL mismatch: the method is published as a public app API, but the OS treats it like the privileged/system-only volume APIs.
Package / library versions:
@amazon-devices/keplerscript-audio-lib:2.0.17
Docs:
Steps to reproduce:
- Create / use a third-party Vega TV app (not a Kepler system app).
- Add
"@amazon-devices/keplerscript-audio-lib": "^2.0.17". - In
manifest.toml, declare:
[[wants.service]]
id = "com.amazon.audio.system"
[[wants.service]]
id = "com.amazon.audio.stream"
[[wants.service]]
id = "com.amazon.audio.control"
[[needs.privilege]]
id = "com.amazon.audio.privilege.settings.control"
- Call:
import { AudioManager, AudioStatus } from '@amazon-devices/keplerscript-audio-lib';
const status = await AudioManager.disableSystemSoundsAsync();
console.log(status);
- Clean rebuild, reinstall, and launch on a Vega / Fire TV Vega device.
Expected:
Per method JSDoc, disableSystemSoundsAsync() resolves to STATUS_NO_ERROR (0) for a third-party app that declared the documented audio services. System / navigation click sounds are suppressed until enableSystemSoundsAsync().
If the API is intentionally system-app-only, the method JSDoc and README should say so (same warning as setVolumeAsync) and should document -9.
Actual:
[disableSystemSoundsAsync] status: -9
-9 is AudioStatus.STATUS_PERMISSION_DENIED. Navigation click sounds still play. Same result with and without com.amazon.audio.privilege.settings.control in the manifest.
Device: Fire TV Vega Select 4k
Ask:
- Is
disableSystemSoundsAsync()intended for third-party apps? If yes, please fix native permission so declaring the audio services (and privilege, if required) actually grants it. - If it is system-app-only, please update the method docs and README so they match
setVolumeAsync, and document-9. - If third-party apps cannot use this API, is there a supported way to disable navigation / D-pad click sounds for a screen (e.g. during video playback)?