Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在后台使用TriggerEventListener的最佳方法?_Android_Service_Broadcastreceiver_Google Awareness - Fatal编程技术网

Android 在后台使用TriggerEventListener的最佳方法?

Android 在后台使用TriggerEventListener的最佳方法?,android,service,broadcastreceiver,google-awareness,Android,Service,Broadcastreceiver,Google Awareness,我希望制作一个在后台运行的应用程序,记录位置数据,而用户实际上不需要将应用程序放在前台,但同时不需要使用太多电池 我最初想为BOOT_设置一个BroadcastReceiver,并运行一个服务,该服务在启动时使用一个重要的运动传感器来记录位置数据,但自从Oreo之后,后台服务就有很多限制 最好的方法是什么?您可以使用JobService它在电池和现代方式方面都很有效,可以在后台执行任务 public class YourJobService extends JobService { @O

我希望制作一个在后台运行的应用程序,记录位置数据,而用户实际上不需要将应用程序放在前台,但同时不需要使用太多电池

我最初想为BOOT_设置一个BroadcastReceiver,并运行一个服务,该服务在启动时使用一个重要的运动传感器来记录位置数据,但自从Oreo之后,后台服务就有很多限制


最好的方法是什么?

您可以使用
JobService
它在电池和现代方式方面都很有效,可以在后台执行任务

public class YourJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {

        if (!Utility.isServiceRunning(GetAlertService.class, getApplicationContext())) {
            startService(new Intent(getApplicationContext(), GetAlertService.class));
        }
        jobFinished(params, false);
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return true;
    }
}
你可以像这样配置它

ComponentName getAlertJobComponent = new ComponentName(context.getPackageName(), YourJobService.class.getName());
JobInfo.Builder getAlertbuilder = new JobInfo.Builder(Constants.getAlertJobid, getAlertJobComponent);
getAlertbuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); // require unmetered network
getAlertbuilder.setRequiresDeviceIdle(true); // device should be idle
getAlertbuilder.setPeriodic(10 * 1000);
getAlertbuilder.setRequiresCharging(false); // we don't care if the device is charging or not
JobScheduler getAlertjobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
getAlertjobScheduler.schedule(getAlertbuilder.build());

有关更多详细信息,请参阅此

您可以使用
JobService
它在电池和在后台执行任务的现代方式方面都很有效

public class YourJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {

        if (!Utility.isServiceRunning(GetAlertService.class, getApplicationContext())) {
            startService(new Intent(getApplicationContext(), GetAlertService.class));
        }
        jobFinished(params, false);
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return true;
    }
}
你可以像这样配置它

ComponentName getAlertJobComponent = new ComponentName(context.getPackageName(), YourJobService.class.getName());
JobInfo.Builder getAlertbuilder = new JobInfo.Builder(Constants.getAlertJobid, getAlertJobComponent);
getAlertbuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); // require unmetered network
getAlertbuilder.setRequiresDeviceIdle(true); // device should be idle
getAlertbuilder.setPeriodic(10 * 1000);
getAlertbuilder.setRequiresCharging(false); // we don't care if the device is charging or not
JobScheduler getAlertjobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
getAlertjobScheduler.schedule(getAlertbuilder.build());
有关更多详细信息,请参阅