如果我的应用针对牛轧糖设备,startService()仍然可以正常工作

时间:2018-05-28 09:05:37

标签: android performance android-location android-8.0-oreo

这就是我开始定位服务的方式。

private void initLocationService() {

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    if(getPermissions(android.Manifest.permission.ACCESS_FINE_LOCATION,GET_LOCATION_PERMISSION)){
        startService(new Intent(HomeActivity.this, LocationUpdateService.class));
    }
}

并在LocationUpdateService中,我将其作为STICKY服务启动。所以它一直在后台工作。

public class LocationUpdateService extends Service implements
        LocationListener,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        IServiceResponse {


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand: ");
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(BACKGROUND_INTERVAL);
        mLocationRequest.setFastestInterval(BACKGROUND_INTERVAL);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

        super.onStartCommand(intent, flags, startId);
        return START_STICKY;
    }

由于我的应用目前定位Api 25 (Nougat),我需要在此特定服务中进行哪些更改才能在Oreo

中完成此工作

使用startForegroundService()时,我仍然无法访问compileSdkVersion 25方法。

这些是我的gradle设置。

compileSdkVersion 25
buildToolsVersion "25.0.3"

defaultConfig {

    minSdkVersion 21
    targetSdkVersion 25
}

1 个答案:

答案 0 :(得分:2)

来自API level 25

startForegroundService()来自API级别26 NOT

compileSdkVersion 25buildToolsVersion "25.0.3"更改为最新版并尝试。

例如,在我的情况下,我在下面使用:

compileSdkVersion 26
buildToolsVersion '27.0.3'