Skip to content

Commit 95b00de

Browse files
committed
Permission check added to job service setPersisted
* Added boot permission check to setPersisted(true) which could throw on some devices.
1 parent 8025425 commit 95b00de

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalSyncServiceUtils.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@
3737
import android.content.ComponentName;
3838
import android.content.Context;
3939
import android.content.Intent;
40+
import android.content.pm.PackageManager;
4041
import android.os.Build;
4142
import android.support.annotation.RequiresApi;
4243

44+
import com.onesignal.AndroidSupportV4Compat.ContextCompat;
45+
4346
import java.util.concurrent.atomic.AtomicBoolean;
4447

4548
class OneSignalSyncServiceUtils {
@@ -117,6 +120,13 @@ private static void scheduleSyncTask(Context context, long delayMs) {
117120
}
118121
}
119122

123+
private static boolean hasBootPermission(Context context) {
124+
return ContextCompat.checkSelfPermission(
125+
context,
126+
"android.permission.RECEIVE_BOOT_COMPLETED"
127+
) == PackageManager.PERMISSION_GRANTED;
128+
}
129+
120130
@RequiresApi(21)
121131
private static void scheduleSyncServiceAsJob(Context context, long delayMs) {
122132
OneSignal.Log(OneSignal.LOG_LEVEL.VERBOSE, "scheduleSyncServiceAsJob:atTime: " + delayMs);
@@ -126,15 +136,16 @@ private static void scheduleSyncServiceAsJob(Context context, long delayMs) {
126136
new ComponentName(context, SyncJobService.class)
127137
);
128138

129-
JobInfo job = jobBuilder
139+
jobBuilder
130140
.setMinimumLatency(delayMs)
131-
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
132-
.setPersisted(true)
133-
.build();
141+
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
142+
143+
if (hasBootPermission(context))
144+
jobBuilder.setPersisted(true);
134145

135146
JobScheduler jobScheduler = (JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
136147
try {
137-
int result = jobScheduler.schedule(job);
148+
int result = jobScheduler.schedule(jobBuilder.build());
138149
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "scheduleSyncServiceAsJob:result: " + result);
139150
} catch (NullPointerException e) {
140151
// Catch for buggy Oppo devices

0 commit comments

Comments
 (0)