小编mea*_*per的帖子

使用前台服务的 Android 9 后台位置跟踪

我正在使用 android 融合位置客户端进行后台位置跟踪,即使应用程序从内存中清除,它也会运行。我正在为此使用前台服务。除了具有省电模式的三星 Galaxy 设备外,它在大多数设备上都能完美运行。我还在应用程序运行时添加了 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 的权限,但三星设备仍然无法完美跟踪。我还使用地理围栏意图服务和部分唤醒锁。此应用程序在所有其他设备上运行良好。请检查我用于后台位置的代码。这不是完整的代码。此外,当我启用位置吐司时,即使在三星上也能完美跟踪距离。但是当 Toasts 被禁用时,它只能在三星第一次使用。

/**********LocationUpdatesService class********/
public class LocationUpdatesService extends Service {
      @Override
    public void onCreate() {
        Log.i(TAG, "Service onCreate");
        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

        mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                super.onLocationResult(locationResult);
                onNewLocation(locationResult.getLastLocation());
            }
        };

        createLocationRequest();
        if (checkPermissions()) {
            getLastLocation();
        }

      powerManager = (PowerManager) getSystemService(POWER_SERVICE);
      wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "myapp::MyWakelockTag");  
      wakeLock.acquire();
    }

    public void requestLocationUpdates() {
        Log.i(TAG, "Requesting location updates");
        //Utils.setRequestingLocationUpdates(this, true);
        startService(new Intent(getApplicationContext(), LocationUpdatesService.class));
        try {
            mFusedLocationClient.requestLocationUpdates(mLocationRequest,
                    mLocationCallback, Looper.myLooper());
        } catch (SecurityException …
Run Code Online (Sandbox Code Playgroud)

java android background geolocation foreground-service

5
推荐指数
0
解决办法
1380
查看次数