summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRHeniz <heniganr1@gmail.com>2021-11-19 16:08:42 -0500
committerRHeniz <heniganr1@gmail.com>2021-11-19 16:08:42 -0500
commit71dc5f62629e76544a16b9ee67d083548167991d (patch)
tree6daa267f05a2b0ef376ef63e49c8e45b82cf4241
parente5bb2cf6648ced76dff582a87ac56bcb89d2e2e6 (diff)
downloadsdl_android-71dc5f62629e76544a16b9ee67d083548167991d.tar.gz
Add PendingIntents to start services from RS
-rwxr-xr-xandroid/hello_sdl_android/src/main/AndroidManifest.xml1
-rwxr-xr-xandroid/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlReceiver.java21
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java7
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java8
-rw-r--r--base/src/main/java/com/smartdevicelink/transport/TransportConstants.java2
5 files changed, 33 insertions, 6 deletions
diff --git a/android/hello_sdl_android/src/main/AndroidManifest.xml b/android/hello_sdl_android/src/main/AndroidManifest.xml
index 992373fa1..636d236ad 100755
--- a/android/hello_sdl_android/src/main/AndroidManifest.xml
+++ b/android/hello_sdl_android/src/main/AndroidManifest.xml
@@ -59,6 +59,7 @@
<service
android:name="com.sdl.hellosdlandroid.SdlService"
+ android:exported="true"
android:foregroundServiceType="connectedDevice">
</service>
<service
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 ec2ebd31c..770513e94 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,11 +1,13 @@
package com.sdl.hellosdlandroid;
+import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import com.smartdevicelink.transport.SdlBroadcastReceiver;
import com.smartdevicelink.transport.SdlRouterService;
+import com.smartdevicelink.transport.TransportConstants;
import com.smartdevicelink.util.DebugTool;
public class SdlReceiver extends SdlBroadcastReceiver {
@@ -16,17 +18,24 @@ public class SdlReceiver extends SdlBroadcastReceiver {
DebugTool.logInfo(TAG, "SDL Enabled");
intent.setClass(context, SdlService.class);
- // SdlService needs to be foregrounded in Android O and above
- // 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
- try {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ if (intent.getParcelableExtra(TransportConstants.PENDING_INTENT_EXTRA) != null) {
+ PendingIntent pendingIntent = (PendingIntent) intent.getParcelableExtra(TransportConstants.PENDING_INTENT_EXTRA);
+ try {
+ pendingIntent.send(context, 0, intent);
+ } catch (PendingIntent.CanceledException e) {
+ e.printStackTrace();
+ }
+ }
+ } else {
+ // SdlService needs to be foregrounded in Android O and above
+ // 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);
} else {
context.startService(intent);
}
- } catch (Exception e) {
- DebugTool.logError("RHENIGAN", "Failed to start SdlService!");
}
}
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java b/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java
index fa4ba4054..ca585c445 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java
@@ -1826,6 +1826,10 @@ public class SdlRouterService extends Service {
startService.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ startService.putExtra(TransportConstants.PENDING_BOOLEAN_EXTRA, true);
+ }
+
AndroidTools.sendExplicitBroadcast(getApplicationContext(), startService, null);
//HARDWARE_CONNECTED
@@ -2902,6 +2906,9 @@ public class SdlRouterService extends Service {
if (receivedVehicleType != null) {
pingIntent.putExtra(TransportConstants.VEHICLE_INFO_EXTRA, receivedVehicleType.getStore());
}
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ pingIntent.putExtra(TransportConstants.PENDING_BOOLEAN_EXTRA, true);
+ }
}
private void startClientPings() {
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java b/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java
index 02ef5169d..0b9125352 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/util/AndroidTools.java
@@ -32,6 +32,7 @@
package com.smartdevicelink.util;
+import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -249,6 +250,13 @@ public class AndroidTools {
for (ResolveInfo app : apps) {
try {
intent.setClassName(app.activityInfo.applicationInfo.packageName, app.activityInfo.name);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && intent.getBooleanExtra(TransportConstants.PENDING_BOOLEAN_EXTRA, false)) {
+ Intent pending = new Intent();
+ PendingIntent pendingIntent = PendingIntent.getForegroundService(context, (int) System.currentTimeMillis(), pending, PendingIntent.FLAG_MUTABLE | Intent.FILL_IN_COMPONENT);
+ intent.putExtra(TransportConstants.PENDING_INTENT_EXTRA, pendingIntent);
+ }
+
context.sendBroadcast(intent);
} catch (Exception e) {
//In case there is missing info in the app reference we want to keep moving
diff --git a/base/src/main/java/com/smartdevicelink/transport/TransportConstants.java b/base/src/main/java/com/smartdevicelink/transport/TransportConstants.java
index 64bae4b41..8176b984b 100644
--- a/base/src/main/java/com/smartdevicelink/transport/TransportConstants.java
+++ b/base/src/main/java/com/smartdevicelink/transport/TransportConstants.java
@@ -46,6 +46,8 @@ public class TransportConstants {
public static final String CONFIRMED_SDL_DEVICE = "confirmed_sdl_device";
public static final String VEHICLE_INFO_EXTRA = "vehicle_info";
public static final String CONNECTION_TYPE_EXTRA = "connection_type";
+ public static final String PENDING_BOOLEAN_EXTRA = "pending_true";
+ public static final String PENDING_INTENT_EXTRA = "pending_intent";
public static final String BIND_LOCATION_PACKAGE_NAME_EXTRA = "BIND_LOCATION_PACKAGE_NAME_EXTRA";
public static final String BIND_LOCATION_CLASS_NAME_EXTRA = "BIND_LOCATION_CLASS_NAME_EXTRA";