NativeScript / NativeScript/plugins
[@nativescript/background-http] error Context.startForegroundService() did not then call Service.startForeground()
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 206
- Forks
- 123
- Avg merge
- 2d 1h
- Merged PRs (30d)
- 1
Description
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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with UploadFile.ts and the session.multipartUpload call, then trace the Android UploadService named in the stack trace. Reproduce the upload using the listed NativeScript and plugin versions and identify where the foreground-service lifecycle fails; done means the upload no longer raises RemoteServiceException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, angular, typescript
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100