-
Notifications
You must be signed in to change notification settings - Fork 104
Description
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": []
}
`