NativeScript/plugins

[@nativescript/background-http] error Context.startForegroundService() did not then call Service.startForeground()

Opened this issue · 2 comments

Hello,
We are using @nativescript/background-http on NativeScript with Angular to upload photos, web API .net Core 3.1

We have this error

System.err: An uncaught Exception occurred on "main" thread.
System.err: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{6fabfc7 u0 it.openweb.next2u/net.gotev.uploadservice.UploadService}
System.err:
System.err: StackTrace:
System.err: android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{6fabfc7 u0 it.openweb.next2u/net.gotev.uploadservice.UploadService}
System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2052)
System.err: at android.os.Handler.dispatchMessage(Handler.java:107)
System.err: at android.os.Looper.loop(Looper.java:214)
System.err: at android.app.ActivityThread.main(ActivityThread.java:7710)
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Version numbers:
-CLI 7.1.1
"@nativescript/android": "7.0.1",
"@nativescript/ios": "7.1.0",

"@nativescript/background-http": "^5.0.1",

package.json:

"dependencies": {
"@angular/animations": "~11.0.5",
"@angular/common": "~11.0.5",
"@angular/compiler": "~11.0.5",
"@angular/core": "~11.0.5",
"@angular/forms": "~11.0.5",
"@angular/platform-browser": "~11.0.5",
"@angular/platform-browser-dynamic": "~11.0.5",
"@angular/router": "~11.0.5",
"@nativescript/angular": "~11.0.0",
"@nativescript/background-http": "^5.0.1",
"@nativescript/core": "^7.1.0",
"@nativescript/theme": "~3.0.1",
"@nativescript/types": "^7.1.0",
"@nativescript/webpack": "^4.0.0",
"jwt-decode": "^2.2.0",
"nativescript-ui-sidedrawer": "~9.0.3",
"reflect-metadata": "~0.1.13",
"rxjs": "~6.6.3",
"zone.js": "~0.11.3"
},
"devDependencies": {
"@angular/compiler-cli": "~11.0.5",
"@nativescript/android": "7.0.1",
"@nativescript/ios": "7.1.0",
"@ngtools/webpack": "~11.0.5",
"codelyzer": "~6.0.0",
"node-sass": "^4.14.1",
"tslint": "~6.1.3",
"typescript": "~4.0.0"
}

UploadFile.ts

public _uploadFile() {

   const name = this.file.substr(this.file.lastIndexOf('/') + 1);
    const description = `${name}`;

    const request = {
        url: `${this.avatarUrl}`,
        method: 'POST',
        utf8: true,
        headers: {
            "Content-Type": "multipart/form-data",
            "File-Name": name
        },
        description: description,
        androidAutoDeleteAfterUpload: false,
        androidNotificationTitle: 'Uploading Product Image',
        androidDisplayNotificationProgress:true
    };

    let task: Task;
    let lastEvent = '';

    const params = [
        { name: 'test', value: 'value' },
        { name: 'testInt', value: 10 },
        { name: 'bool', value: true },
        { name: 'fileToUpload', filename: this.file, mimeType: 'image/jpeg' },
    ];

    task = this.session.multipartUpload(params, request);

    function onEvent(e) {
        if (lastEvent !== e.eventName) {
            // suppress all repeating progress events and only show the first one
            lastEvent = e.eventName;
        } else {
            return;
        }

        this.events.push({
            eventTitle: e.eventName + ' ' + e.object.description,
            eventData: JSON.stringify({
                error: e.error ? e.error.toString() : e.error,
                currentBytes: e.currentBytes,
                totalBytes: e.totalBytes,
                body: e.data,
                responseCode: e.responseCode,
            }),
        });
    }

    task.on('progress', onEvent.bind(this));
    task.on('error', onEvent.bind(this));
    task.on('responded', onEvent.bind(this));
    task.on('complete', onEvent.bind(this));
    lastEvent = '';
    this.tasks.push(task);
}

web API .net Core 3

    [HttpPost("attachement")]
    public async Task<ActionResult> UploadAttachement([FromForm] IFormFile file)
    {
        var attachement = new modelProfile
        {
            ContentType = file.ContentType,
            name = file.FileName
        };
        using (var stream = file.OpenReadStream())
        {
            attachement.content = new byte[file.Length];
            await stream.ReadAsync(attachement.content, 0, (int)file.Length);
        };

        await serviceUpload.uploadProfile(attachement);

        return Ok();
    }

Can you please help with this error and the way to fix it?
Thank you

I get this too, sometimes. Base/Original android project has very similar issue: gotev/android-upload-service#549 (which points to a StackOverflow question and a few answers). Worth keeping an eye on it.

I will check it.
Thank you