boot_completed not working on Android 10 Q API level 29

前端 未结 3 1989
别那么骄傲
别那么骄傲 2020-12-18 08:22

I need help.

I have an application that starts an Intent after the boot that works from Android 6 to Android 9 API level 28. But this code does not work on

3条回答
  •  情歌与酒
    2020-12-18 08:58

    Guess I found a 'solution' for me.

        public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
                    Log.e(TAG, "launching from special > API 28 (" + Build.VERSION.SDK_INT + ")"); // You have to schedule a Service
                    JobServiceScheduler jobServiceScheduler = new JobServiceScheduler(context);
                    boolean result = jobServiceScheduler.scheduleMainService(20L); // Time you will wait to launch
                } else {
                    Log.e(TAG, "launching from normal < API 29"); // You can still launch an Activity 
                    try {
                        Intent intentMain = new Intent(context, YourActivity.class);
                        intentMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        if (Build.VERSION.SDK_INT < 28) {
                            context.startService(intentMain);
                        } else {
                            context.startForegroundService(intentMain);
                        }
                    } catch (ActivityNotFoundException ex) {
                        Log.e(TAG, "ActivityNotFoundException" + ex.getLocalizedMessage());
                    }
                }
        }
    
        boolean scheduleMainService(Long segundos) {
            ComponentName serviceComponent = new ComponentName(context, YourService.class);
            JobInfo.Builder builder = getCommonBuilder(serviceComponent, YOUR_SERVICE_JOB_ID);
            builder.setMinimumLatency(TimeUnit.SECONDS.toMillis(segundos / 2)); // wait at least
            builder.setOverrideDeadline(TimeUnit.SECONDS.toMillis(segundos)); // maximum delay
            PersistableBundle extras = new PersistableBundle();
            extras.putLong("time", segundos);
            builder.setExtras(extras);
    
            JobScheduler jobScheduler = getJobScheduler(context);
            if (jobScheduler != null) {
                jobScheduler.schedule(builder.build());
                return true;
            } else {
                return false;
            }
        }
    

提交回复
热议问题