Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Could not request audio focus nativescript-audio version 6.2.6 on Android 14 #202

Open
pap5508 opened this issue Feb 20, 2024 · 1 comment

Comments

@pap5508
Copy link

pap5508 commented Feb 20, 2024

Seems there is bug on android 14

    public async playRecord(
        attachment = undefined,
        attachmentId = undefined,
        args,
        repeat: boolean = false
    ) {


        console.log("attachment.filepath: " + attachment.filepath);
        let recordedFile: File = null;

        console.log("1...........................  "+ attachment.filepath);

        //Pause current playing file if another file is tapped and reset variables
        if (attachmentId !== this.currentPlayingAttachmentId && attachmentId !== this.currentPausedAttachmentId) {
            console.log("2...........................  "+ attachment.filepath);

            try {
                if (this._player.isAudioPlaying()) {
                    console.log("3...........................  "+ attachment.filepath);

                    await this.pauseRecord(this.currentPlayingAttachmentId);
                }
            } catch (error) {
                console.log("there was an error pausing the record");
            }

            //reset for new file
            this.isPlaying = false;
            this.isPaused = false;
            this.tapped = false;
            timer.clearInterval(this.timerId);
            this.progressInMilliseconds = 0;
            this.progressInSeconds = 0;
            this.currentPlaytimeInMilliseconds = 0;
            this.currentPlaytimeInSeconds = 0;
            this.currentPausedAttachmentId = null;
            this.currentPlayingAttachmentId = null;
            this.remainingDuration = 0;
            this.changeDetectionRef.detectChanges();
            this._player.dispose().then(() => console.log("player disposed"));
        }

        if (attachment.filepath && File.exists(attachment.filepath)) {
            console.log("4...........................  "+ attachment.filepath);
            recordedFile = File.fromPath(attachment.filepath);
        }
        if (
            !recordedFile ||
            !attachment.filepath ||
            !File.exists(attachment.filepath)
        ) {
            try {
                console.log("file not foumnd, try download");

                var downloadparent = args.object.parent;
                var downloadActivityIndicator = this.downloadActivityIndicator
                    ? this.downloadActivityIndicator.nativeElement
                    : downloadparent.getViewById("DownloadActivityIndicator");

                if (downloadActivityIndicator) {
                    downloadActivityIndicator.busy = true;
                    downloadActivityIndicator.visibility = "visible";
                }
                this.changeDetectionRef.detectChanges();
                await this.checkPermissions().then((granted) => {
                    if (granted) {
                        if (isAndroid) {
                            return this.attachmentsService
                                .downloadAttachment(attachment, this.chat.name)
                                .then((fileExist) => {
                                    if (fileExist === "false" || fileExist == null) {
                                        return Promise.reject("file not found");
                                    } else {
                                        recordedFile = File.fromPath(attachment.filepath);
                                        if (downloadActivityIndicator) {
                                            downloadActivityIndicator.busy = false;
                                            downloadActivityIndicator.visibility = "collapsed";
                                        }
                                        this.changeDetectionRef.detectChanges();
                                        return Promise.resolve();
                                    }
                                });
                        } else {
                            return this.attachmentsService
                                .iosAttachment(attachment, this.chat.name)
                                .then((fileExist) => {
                                    if (fileExist == "false" || fileExist == null) {
                                        return Promise.reject("file not found");
                                    } else {
                                        recordedFile = File.fromPath(attachment.filepath);
                                        if (downloadActivityIndicator) {
                                            downloadActivityIndicator.busy = false;
                                            downloadActivityIndicator.visibility = "collapsed";
                                        }
                                        this.changeDetectionRef.detectChanges();
                                        return Promise.resolve();
                                    }
                                });
                        }
                    }
                });

                if (!File.exists(recordedFile.path)) {
                    console.log("download failed");
                    return;
                }
            } catch {
                console.log("could not dl file");
                return;
            }
        }

        if (recordedFile === null) {
            console.log("no audio file found");
            return;
        }


        if (this.isPaused && !repeat) {
            console.log("5...........................  "+ attachment.filepath);
            this.isPaused = false;
            this.isPlaying = true;
            this.currentPausedAttachmentId = null;
            this.currentPlayingAttachmentId = attachmentId;
            this.changeDetectionRef.detectChanges();
            this.tapped = false;
            this._player.resume();

            if (!this._player.isAudioPlaying()) {
                this.isPaused = false;
                this.isPlaying = false;
                this.currentPlaytimeInMilliseconds = 0;
                this.currentPlaytimeInSeconds = 0;
                timer.clearInterval(this.timerId);
                this.changeDetectionRef.detectChanges();
                return;
            }
            return;
        }

        console.log("RECORDED FILE : " + JSON.stringify(recordedFile));
        const playerOptions: AudioPlayerOptions = {
            audioFile: recordedFile.path,
            loop: false,
            completeCallback: () => {
                console.log("6...........................  "+ attachment.filepath);
                console.log("Audio file complete.");
                this.isPlaying = false;
                this.isPaused = false;
                this.tapped = false;
                timer.clearInterval(this.timerId);
                this.progressInMilliseconds = 0;
                this.progressInSeconds = 0;
                this.changeDetectionRef.detectChanges();
                this.currentPausedAttachmentId = null;
                this.currentPlayingAttachmentId = null;
                this.remainingDuration = 0;
                this.changeDetectionRef.detectChanges();
                if (!playerOptions.loop) {
                    this._player.dispose().then(() => console.log("player disposed"));
                }
            },

            errorCallback: (errorObject) => {
                console.log("7...........................  "+ attachment.filepath);
                console.log(JSON.stringify(errorObject));
                this.isPlaying = false;
                this.tapped = false;
                this.isPaused = false;
                this.currentPausedAttachmentId = null;
                this.currentPlayingAttachmentId = null;
                this.remainingDuration = 0;
                this.progressInMilliseconds = 0;
                this.progressInSeconds = 0;
                if (!this.isDisposed) {
                    this.changeDetectionRef.detectChanges();
                }
            },

            infoCallback: (infoObject) => {
                console.log("8...........................  "+ attachment.filepath);
                console.log(JSON.stringify(infoObject));
            },
        };



        this._player.playFromFile(playerOptions).then(
            (played) => {
                console.log("9...........................  "+ JSON.stringify(playerOptions));
                console.log("file played", played);
                this.isPlaying = true;
                this.isPaused = false;
                this.currentPausedAttachmentId = null;
                this.currentPlayingAttachmentId = attachmentId;
                this.changeDetectionRef.detectChanges();
                this._player.getAudioTrackDuration().then((duration) => {
                    this.audioTrackDurationInSeconds = platform.isAndroid
                        ? this.roundMillisecondsToNearestSecond(+duration)
                        : +duration;
                    this.audioTrackDurationInMilliseconds = platform.isAndroid
                        ? +duration
                        : +duration * 1000;
                    // start audio duration tracking
                    this.startDurationTracking(
                        this.audioTrackDurationInSeconds,
                        this.audioTrackDurationInMilliseconds
                    );
                });
            },
            (err) => {
                console.log("error playFromFile");
                this.isPlaying = false;
                this.isPaused = false;
                this.currentPausedAttachmentId = null;
                this.currentPlayingAttachmentId = null;
            }
        );
    }


Unhandled Promise rejection: Could not request audio focus ; Zone: <root> ; Task: null ; Value: Error: Could not request audio focus Error: Could not request audio focus
      at file: app/webpack:/TestApp/node_modules/nativescript-audio/android/player.js:260:0
      at new ZoneAwarePromise (file: app/webpack:/TestApp/node_modules/zone.js/fesm2015/zone.js:1429:0)
      at TNSPlayer.play (file: app/webpack:/TestApp/node_modules/nativescript-audio/android/player.js:250:0)
      at Object.onPrepared (file: app/webpack:/TestApp/node_modules/nativescript-audio/android/player.js:211:0)
  package.json 
  `{

"description": "NativeScript Application",
"version": "1.1.21",
"license": "MIT",
"name": "TestApp",
"readme": "NativeScript Application",
"repository": "",
"dependencies": {
"@angular/animations": "~15.1.0",
"@angular/common": "~15.1.0",
"@angular/compiler": "~15.1.0",
"@angular/core": "~15.1.0",
"@angular/forms": "~15.1.0",
"@angular/platform-browser": "~15.1.0",
"@angular/platform-browser-dynamic": "~15.1.0",
"@angular/router": "~15.1.0",
"@finalsite/rich-text-editor": "^0.1.1",
"@nativescript-community/ui-barcodeview": "^3.6.1",
"@nativescript-community/ui-document-picker": "^1.1.12",
"@nativescript-community/ui-material-bottomnavigationbar": "^7.2.44",
"@nativescript-community/ui-pulltorefresh": "^2.5.3",
"@nativescript-use/nativescript-orientation": "^0.0.3",
"@nativescript/angular": "^15.0.1",
"@nativescript/appversion": "^2.0.0",
"@nativescript/background-http": "^6.0.1",
"@nativescript/biometrics": "^1.3.1",
"@nativescript/camera": "~5.0.15",
"@nativescript/core": "~8.6.2",
"@nativescript/datetimepicker": "^2.1.13",
"@nativescript/firebase": "11.1.3",
"@nativescript/firebase-core": "^3.2.0",
"@nativescript/firebase-messaging": "^3.2.0",
"@nativescript/imagepicker": "^3.0.0",
"@nativescript/iqkeyboardmanager": "^2.1.1",
"@nativescript/local-notifications": "^6.1.1",
"@nativescript/secure-storage": "^3.0.3",
"@nativescript/theme": "^2.5.0",
"@ngx-translate/core": "^14.0.0",
"@ngx-translate/http-loader": "^7.0.0",
"@nota/nativescript-webview-ext": "^8.0.2",
"@nstudio/nativescript-cardview": "^2.0.2",
"@nstudio/nativescript-carousel": "^8.0.3",
"@nstudio/nativescript-checkbox": "^2.0.5",
"@nstudio/nativescript-floatingactionbutton": "^3.0.4",
"@nstudio/nativescript-pulltorefresh": "^3.0.2",
"@nstudio/nativescript-snackbar": "^2.1.0",
"@triniwiz/nativescript-image-cache-it": "7.4.0",
"autolinker": "^4.0.0",
"bootstrap": "^4.5.2",
"email-validator": "^2.0.4",
"enhanced-resolve": "^4.1.1",
"jwt-decode": "^2.2.0",
"moment": "^2.30.1",
"nativescript": "^8.6.5",
"nativescript-audio": "~6.2.6",
"nativescript-drop-down": "~6.0.2",
"nativescript-imagecropper": "~4.0.3",
"nativescript-livesync": "^1.4.1",
"nativescript-mediafilepicker": "~4.0.2",
"nativescript-modal-datetimepicker": "~2.1.5",
"nativescript-oauth2": "~3.0.10",
"nativescript-permissions": "~1.3.12",
"nativescript-phone": "^3.0.3",
"nativescript-screen-orientation": "~2.0.0",
"nativescript-sqlite": "~2.8.6",
"nativescript-themes": "^2.0.2",
"nativescript-ui-listview": "~15.2.3",
"nativescript-webview-utils": "~4.0.0",
"ngx-linky": "~4.0.0",
"qs": "npm:querystring@^0.2.1",
"rxjs": "~7.5.0",
"util": "^0.12.5",
"zone.js": "^0.11.6"
},
"devDependencies": {
"@angular-devkit/build-angular": "~15.1.0",
"@angular/compiler-cli": "~15.1.0",
"@nativescript/android": "8.6.2",
"@nativescript/ios": "8.6.3",
"@nativescript/types": "~8.4.0",
"@nativescript/webpack": "~5.0.18",
"@ngtools/webpack": "~15.1.0",
"sass": "^1.34.1",
"typescript": "~4.9.4"
},
"scripts": {
"ns-bundle": "ns-bundle"
},
"main": "app/main.ts",
"hooks": []
}
`

@Slh-Ibrahim
Copy link

did you solve it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants