37
37
import android .content .ComponentName ;
38
38
import android .content .Context ;
39
39
import android .content .Intent ;
40
+ import android .content .pm .PackageManager ;
40
41
import android .os .Build ;
41
42
import android .support .annotation .RequiresApi ;
42
43
44
+ import com .onesignal .AndroidSupportV4Compat .ContextCompat ;
45
+
43
46
import java .util .concurrent .atomic .AtomicBoolean ;
44
47
45
48
class OneSignalSyncServiceUtils {
@@ -117,6 +120,13 @@ private static void scheduleSyncTask(Context context, long delayMs) {
117
120
}
118
121
}
119
122
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
+
120
130
@ RequiresApi (21 )
121
131
private static void scheduleSyncServiceAsJob (Context context , long delayMs ) {
122
132
OneSignal .Log (OneSignal .LOG_LEVEL .VERBOSE , "scheduleSyncServiceAsJob:atTime: " + delayMs );
@@ -126,15 +136,16 @@ private static void scheduleSyncServiceAsJob(Context context, long delayMs) {
126
136
new ComponentName (context , SyncJobService .class )
127
137
);
128
138
129
- JobInfo job = jobBuilder
139
+ jobBuilder
130
140
.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 );
134
145
135
146
JobScheduler jobScheduler = (JobScheduler )context .getSystemService (Context .JOB_SCHEDULER_SERVICE );
136
147
try {
137
- int result = jobScheduler .schedule (job );
148
+ int result = jobScheduler .schedule (jobBuilder . build () );
138
149
OneSignal .Log (OneSignal .LOG_LEVEL .INFO , "scheduleSyncServiceAsJob:result: " + result );
139
150
} catch (NullPointerException e ) {
140
151
// Catch for buggy Oppo devices
0 commit comments