El sistema Android 8.0 y superior debe crearse para mostrar la notificación de manejo de problemas "XX se está ejecutando" al abrir el Servicio.

antecedentes:

Para el sistema Android 8.0 y superior, se debe usar el método startForegroundService (Intent intent) para iniciar el Servicio , y el Servicio correspondiente debe configurarse en startForeground (int id, notificación de notificación) , por lo que debemos crear una notificación para que cuando el servicio se esté ejecutando, siempre muestre un " xx se está ejecutando "aviso similar.

objetivos:

Eliminar el contenido de la notificación "xx se está ejecutando"

solución:

El uso de JobService oficial , por JobInfo.Builder crea una demanda correspondiente JobInfo , por JobScheduler.schedule (JobInfo jobInfo) para implementar la función de servicio

  • Android5.0 inicia JobService, por lo que se puede utilizar el sistema 5.0 y versiones posteriores.
  • Por debajo de la versión Android7.0, puede usar JobInfo.Builder.setPeriodic (long intervalMillis) para establecer libremente el intervalo de ejecución de la tarea.
  • El intervalo mínimo para la ejecución de tareas de Android 7.0 y versiones posteriores del sistema está limitado a JobInfo.getMinPeriodMillis () , que es de 15 minutos . Pero el segundo parámetro de setPeriodic (long intervalMillis, long flexMillis) puede establecer el tiempo de ventana para la siguiente ejecución de la tarea, el tiempo es JobInfo.getMinFlexMillis () (5 minutos) o el 5% del tiempo del intervalo de la tarea , el que sea mayor OMS. La ejecución de la tarea específica es la siguiente

Ejemplo de código:

Ejemplo de JobService

import android.app.job.JobParameters;
import android.app.job.JobService;
import android.os.Build;
import android.support.annotation.RequiresApi;


/**
 * created by z on 2018/11/19
 * 系统5.0以上使用的服务
 */
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class CowboyJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {

        //此处进行自定义的任务
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        return false;
    }
}

Declare JobService en la etiqueta <application> </application> de AndroidManifest.xml 

//具体的JobService名字和路径以自己编写的为准
<service
            android:name=".service.CowboyJobService"
            android:permission="android.permission.BIND_JOB_SERVICE" />

 Comience a ejecutar JobService

//开启JobService服务:CowboyJobService.class为上边创建的JobService
    public static void startPollingService(Context context) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(context, CowboyJobService.class));
            builder.setMinimumLatency(0)
                    .setBackoffCriteria(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS, JobInfo.BACKOFF_POLICY_LINEAR);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                builder.setPeriodic(JobInfo.getMinPeriodMillis(), JobInfo.getMinFlexMillis());
            } else {
                builder.setPeriodic(TimeUnit.MINUTES.toMillis(5));
            }

            JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
            if (jobScheduler != null) {
                jobScheduler.schedule(builder.build());
            }

        } else {

            //系统5.0以下的可继续使用Service
        }
    }

 

Supongo que te gusta

Origin blog.csdn.net/nsacer/article/details/84629842
Recomendado
Clasificación