summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRHenigan <heniganr1@gmail.com>2020-05-13 10:42:05 -0400
committerRHenigan <heniganr1@gmail.com>2020-05-13 10:42:05 -0400
commitefa9416df313d372546b0440815d9983171b33d2 (patch)
treec02caf60c698683534176c42ea8e46b8c56aa8e0
parentb7a905eba90d49bb9132e69ab295713238d4abcc (diff)
downloadsdl_android-efa9416df313d372546b0440815d9983171b33d2.tar.gz
Check permissions before trying to startForeground
-rwxr-xr-xandroid/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlReceiver.java9
-rwxr-xr-xandroid/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java7
-rw-r--r--android/hello_sdl_android/tcp/release/output.json1
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterStatusProvider.java10
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);