cordova-plugin-background-mode: App crashed when launch any app/ android 9

Hi. This is very strange bug, because app work is ok till I’m not launch, Youtube app. After launch app is crashed. If youtube already launched early and I’m open him, app is don’t crash.

If app isn’t in background and open Youtube, app don’t crash.

Tested on katzer and forks (tushe, etc) * Android 9 Xiami A1 (and emulator) * plugins: cordova-plugin-background-mode 0.7.2 “BackgroundMode” cordova-plugin-badge 0.8.8 “Badge” cordova-plugin-device 2.0.2 “Device” cordova-plugin-local-notification 0.9.2 “LocalNotification” cordova-plugin-netto 1.0.1 “Netto” cordova-plugin-openvpn 1.0.0 “OpenVPN” cordova-plugin-ping 0.3.1 “Ping” cordova-plugin-whitelist 1.3.3 “Whitelist” * Errors:

03-17 19:46:53.868  4325 17466 I bweb    : Failed closing connection
03-17 19:46:53.868  4325 17466 I bweb    : javax.net.ssl.SSLException: Write error: ssl=0x719fc80788: I/O error during system call, Broken pipe
03-17 19:46:53.868  4325 17466 I bweb    : 	at com.google.android.gms.org.conscrypt.NativeCrypto.SSL_write(Native Method)
03-17 19:46:53.868  4325 17466 I bweb    : 	at com.google.android.gms.org.conscrypt.NativeSsl.write(:com.google.android.gms@15090039@15.0.90 (100408-231259764):4)
03-17 19:46:53.868  4325 17466 I bweb    : 	at com.google.android.gms.org.conscrypt.ConscryptFileDescriptorSocket$SSLOutputStream.write(:com.google.android.gms@15090039@15.0.90 (100408-231259764):6)
03-17 19:46:53.868  4325 17466 I bweb    : 	at bwph.a_(:com.google.android.gms@15090039@15.0.90 (100408-231259764):2)
03-17 19:46:53.868  4325 17466 I bweb    : 	at bwoq.a_(:com.google.android.gms@15090039@15.0.90 (100408-231259764):4)
03-17 19:46:53.868  4325 17466 I bweb    : 	at bwpk.close(:com.google.android.gms@15090039@15.0.90 (100408-231259764):2)
03-17 19:46:53.868  4325 17466 I bweb    : 	at bwfu.close(Unknown Source:6)
03-17 19:46:53.868  4325 17466 I bweb    : 	at bwdi.run(:com.google.android.gms@15090039@15.0.90 (100408-231259764):1)
03-17 19:46:53.868  4325 17466 I bweb    : 	at bwbz.run(:com.google.android.gms@15090039@15.0.90 (100408-231259764):2)
03-17 19:46:53.868  4325 17466 I bweb    : 	at rnb.run(:com.google.android.gms@15090039@15.0.90 (100408-231259764):21)
03-17 19:46:53.868  4325 17466 I bweb    : 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-17 19:46:53.868  4325 17466 I bweb    : 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-17 19:46:53.868  4325 17466 I bweb    : 	at rsw.run(Unknown Source:7)
03-17 19:46:53.868  4325 17466 I bweb    : 	at java.lang.Thread.run(Thread.java:764)
03-17 19:46:54.282 17870 17942 W YouTube : vwp: valueInCurrentMillis bad value: 0
03-17 19:46:54.282 17870 17942 W YouTube : 	at eav.b(SourceFile:14)
03-17 19:46:54.282 17870 17942 W YouTube : 	at dka.b(SourceFile:11)
03-17 19:46:54.282 17870 17942 W YouTube : 	at dll.run(SourceFile:312)
03-17 19:46:54.282 17870 17942 W YouTube : 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
03-17 19:46:54.282 17870 17942 W YouTube : 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
03-17 19:46:54.282 17870 17942 W YouTube : 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
03-17 19:46:54.282 17870 17942 W YouTube : 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-17 19:46:54.282 17870 17942 W YouTube : 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-17 19:46:54.282 17870 17942 W YouTube : 	at vvq.run(SourceFile:12)
03-17 19:46:54.282 17870 17942 W YouTube : 	at java.lang.Thread.run(Thread.java:764)

full logcat: logcat.txt … upd: Tested. App will crash if launch any Google App: Google Play, Youtube, Settngs, Instagram, even Calculator… upd 2: on Android 7 it’s work is ok

About this issue

  • Original URL
  • State: open
  • Created 5 years ago
  • Reactions: 1
  • Comments: 17

Commits related to this issue

Most upvoted comments

You can also add the permission to Ionic 3 / Cordova apps by adding this in your config.xml under android platform:

    <platform name="android">
        <config-file parent="./" target="app/src/main/AndroidManifest.xml" xmlns:android="http://schemas.android.com/apk/res/android">
            <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
        </config-file>
    </platform>

I could run on android 9 1 - Change ForegroundService.java 2 - Add permission to AndroidManifest.xml

You can check the link : https://stackoverflow.com/questions/47531742/startforeground-fail-after-upgrade-to-android-8-1

1- ForegroundService.java

import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.Color; import android.os.Binder; import android.os.Build; import android.os.IBinder; import android.os.PowerManager; import android.support.v4.app.NotificationCompat; import org.json.JSONObject; import java.lang.reflect.Method;

private void keepAwake() {
    JSONObject settings = BackgroundMode.getSettings();
    boolean isSilent    = settings.optBoolean("silent", false);

    if (!isSilent) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            startMyOwnForeground();
        else
            startForeground(NOTIFICATION_ID, makeNotification());
    }

    PowerManager powerMgr = (PowerManager)
            getSystemService(POWER_SERVICE);

    wakeLock = powerMgr.newWakeLock(
            PowerManager.PARTIAL_WAKE_LOCK, "BackgroundMode");

    wakeLock.acquire();
}

private void startMyOwnForeground(){
    String NOTIFICATION_CHANNEL_ID = "com.yourapp.id";
    String channelName = "My Background Service";
    NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
    chan.setLightColor(Color.BLUE);
    chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    assert manager != null;
    manager.createNotificationChannel(chan);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
    Notification notification = notificationBuilder.setOngoing(true)
            //.setSmallIcon(R.drawable.icon_1)
            .setContentTitle("App is running in background")
            .setPriority(NotificationManager.IMPORTANCE_MIN)
            .setCategory(Notification.CATEGORY_SERVICE)
            .build();
    startForeground(2, notification);
} 

2 - AndroidManifest.xml

Give permission ForegroundService <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

Found same conclusion as @zutakamarikana

Created a cordova-android issue #https://github.com/apache/cordova-android/issues/851

Same issue in Galaxy S8 with android 9

@zutakamarikana Thank you for noticing that this issue only occurs with “excludeFromTaskList”. I can confirm that this is indeed the case, at least on my Galaxy S9 (which is running Android 9) and Android 9 emulator. I was having the same issue but never tried running without “excludeFromTaskList”. The fix for this should be quite simple – to change following line in BackgroundModeExt.java from: if (am == null || SDK_INT < 21) to if (am == null || SDK_INT < 21 || SDK_INT > 27)

Created for test a new empty project with same problem.

(After launch app he create notify and move to background. If launch any app - he is crash)

Here apk: app-debug-apk.zip

Here source: testproject.zip

The most interesting thing is that before everything was ok. But now this problem is even with empty projects. I’m tryed update cordova, sdk/nsk, gradle and it’s didn’t help anyway.

cordova 8.1.2
gradle 4.10.2
sdk-platform-tools 28.0.2
sdk-tools 26.1.1
ndk 19.2.534
jdk jdk1.8.0_181

For test installed java and android tools to my centos server (I thought maybe trouble in my windows dev-environment)

  • Created empty project cordova create hello com.example.hello HelloWorld
  • Added platform cd hello & cordova platform add
  • Installed plugin cordova plugin add https://github.com/katzer/cordova-plugin-background-mode.git
  • Added cordova.plugins.backgroundMode.setDefaults({ title: 'test', text: 'test', }); cordova.plugins.backgroundMode.enable(); cordova.plugins.backgroundMode.excludeFromTaskList(); cordova.plugins.backgroundMode.moveToBackground(); after this.receivedEvent('deviceready'); in js/index.js
  • cordova build android
  • Downloaded and installed apk to my phone and take the same bag (App is work till I’m not start any other app)