diff options
author | RHenigan <heniganr1@gmail.com> | 2020-05-13 10:42:05 -0400 |
---|---|---|
committer | RHenigan <heniganr1@gmail.com> | 2020-05-13 10:42:05 -0400 |
commit | efa9416df313d372546b0440815d9983171b33d2 (patch) | |
tree | c02caf60c698683534176c42ea8e46b8c56aa8e0 | |
parent | b7a905eba90d49bb9132e69ab295713238d4abcc (diff) | |
download | sdl_android-efa9416df313d372546b0440815d9983171b33d2.tar.gz |
Check permissions before trying to startForeground
4 files changed, 23 insertions, 4 deletions
diff --git a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlReceiver.java b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlReceiver.java index bedeb0a39..1aac32576 100755 --- a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlReceiver.java +++ b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlReceiver.java @@ -1,5 +1,6 @@ package com.sdl.hellosdlandroid; +import android.Manifest; import android.content.Context; import android.content.Intent; import android.os.Build; @@ -7,6 +8,7 @@ import android.util.Log; import com.smartdevicelink.transport.SdlBroadcastReceiver; import com.smartdevicelink.transport.SdlRouterService; +import com.smartdevicelink.util.DebugTool; public class SdlReceiver extends SdlBroadcastReceiver { private static final String TAG = "SdlBroadcastReciever"; @@ -20,7 +22,12 @@ public class SdlReceiver extends SdlBroadcastReceiver { // This will prevent apps in the background from crashing when they try to start SdlService // Because Android O doesn't allow background apps to start background services if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - context.startForegroundService(intent); + int permission = context.checkPermission(Manifest.permission.FOREGROUND_SERVICE, android.os.Process.myPid(), android.os.Process.myUid()); + if (permission != -1) { + context.startForegroundService(intent); + } else { + DebugTool.logError("Foreground Permissions Not Enabled: will not start foreground permissions"); + } } else { context.startService(intent); } diff --git a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java index 6b7e77c69..e87fe328c 100755 --- a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java +++ b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java @@ -6,6 +6,7 @@ import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.Service; import android.content.Context; +import android.content.ContextWrapper; import android.content.Intent; import android.os.Build; import android.os.IBinder; @@ -105,7 +106,11 @@ public class SdlService extends Service { .setContentTitle("Connected through SDL") .setSmallIcon(R.drawable.ic_sdl) .build(); - startForeground(FOREGROUND_SERVICE_ID, serviceNotification); + try { + startForeground(FOREGROUND_SERVICE_ID, serviceNotification); + } catch (Exception e){ + DebugTool.logError("Unable to start notification service in the foreground", e); + } } } } diff --git a/android/hello_sdl_android/tcp/release/output.json b/android/hello_sdl_android/tcp/release/output.json new file mode 100644 index 000000000..b10e93a46 --- /dev/null +++ b/android/hello_sdl_android/tcp/release/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"hello_sdl_android-tcp-release.apk","fullName":"tcpRelease","baseName":"tcp-release"},"path":"hello_sdl_android-tcp-release.apk","properties":{}}]
\ No newline at end of file diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterStatusProvider.java b/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterStatusProvider.java index 53e1dbbed..a18d1ab2b 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterStatusProvider.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterStatusProvider.java @@ -31,6 +31,7 @@ */ package com.smartdevicelink.transport; +import android.Manifest; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -45,6 +46,7 @@ import android.os.RemoteException; import android.util.Log; import com.smartdevicelink.util.AndroidTools; +import com.smartdevicelink.util.DebugTool; import java.lang.ref.WeakReference; @@ -134,8 +136,12 @@ public class SdlRouterStatusProvider { }else { bindingIntent.putExtra(FOREGROUND_EXTRA, true); SdlBroadcastReceiver.setForegroundExceptionHandler(); //Prevent ANR in case the OS takes too long to start the service - context.startForegroundService(bindingIntent); - + int permission = context.checkPermission(Manifest.permission.FOREGROUND_SERVICE, android.os.Process.myPid(), android.os.Process.myUid()); + if (permission != -1) { + context.startForegroundService(bindingIntent); + } else { + DebugTool.logError("Foreground Permissions Not Enabled: will not start foreground permissions"); + } } bindingIntent.setAction( TransportConstants.BIND_REQUEST_TYPE_STATUS); return context.bindService(bindingIntent, routerConnection, Context.BIND_AUTO_CREATE); |