From 574f80aefd77b238d3a70ca1b082766e2159a252 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Fri, 26 May 2017 18:01:07 +0800 Subject: [PATCH] Fix a crash caused by new background limit on Android O --- .../com/github/shadowsocks/ShadowsocksRunnerService.scala | 8 ++++++++ .../main/scala/com/github/shadowsocks/utils/Utils.scala | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala index 34a2e86a..75f7d832 100644 --- a/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala +++ b/mobile/src/main/scala/com/github/shadowsocks/ShadowsocksRunnerService.scala @@ -24,6 +24,8 @@ import android.app.Service import android.content.Intent import android.net.VpnService import android.os.{Handler, IBinder} +import android.support.v4.app.NotificationCompat +import android.support.v4.os.BuildCompat import com.github.shadowsocks.ShadowsocksApplication.app class ShadowsocksRunnerService extends Service with ServiceBoundContext { @@ -47,11 +49,17 @@ class ShadowsocksRunnerService extends Service with ServiceBoundContext { override def onCreate() { super.onCreate() + if (BuildCompat.isAtLeastO) { + val builder = new NotificationCompat.Builder(this) + builder.setPriority(NotificationCompat.PRIORITY_MIN) + startForeground(1, builder.build) + } attachService() } override def onDestroy() { super.onDestroy() + stopForeground(true) detachService() } } diff --git a/mobile/src/main/scala/com/github/shadowsocks/utils/Utils.scala b/mobile/src/main/scala/com/github/shadowsocks/utils/Utils.scala index 266703fb..29c54340 100644 --- a/mobile/src/main/scala/com/github/shadowsocks/utils/Utils.scala +++ b/mobile/src/main/scala/com/github/shadowsocks/utils/Utils.scala @@ -28,6 +28,7 @@ import android.content.pm.PackageManager import android.content.{Context, Intent} import android.graphics._ import android.os.Build +import android.support.v4.os.BuildCompat import android.util.{Base64, DisplayMetrics, Log} import android.view.View.MeasureSpec import android.view.{Gravity, View, Window} @@ -138,7 +139,8 @@ object Utils { def startSsService(context: Context) { val intent = new Intent(context, classOf[ShadowsocksRunnerService]) - context.startService(intent) + if (BuildCompat.isAtLeastO) context.startForegroundService(intent) + else context.startService(intent) } def stopSsService(context: Context) {