0

複数のデバイスで GPS 位置情報サービスを開始しています。このサービスは、電源ボタンが押されてロック画面の状態であっても、Android バージョン <= 7 のデバイスで正しく動作しますが、Android 8.0.0 を搭載した Nokia 3 で試してみました。電源ボタンを押すとサービスが停止しますが、しばらくするとデバイスが自動的にロックされても停止しません。電源ボタンを押してデバイスのロックを解除すると、サービスが GPS データの送信を再開します。これは私のコードです:

public class GPS_Service extends Service {
private static final String TAG = GPS_Service.class.getName();
private static final int minTimeSecondsSamplingRate = AppConfig.GPS_MIN_TIME;
private static final int minDistMetersSamplingRate = AppConfig.GPS_MIN_DISTANCE;

private LocationManager locationManager;
private LocationListener locationListener;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@SuppressLint("MissingPermission")
@Override
public void onCreate() {
    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            Log.d(TAG, "Location changed");
            Intent intentSendToMainActivity = new Intent(AppConfig.C_STR_INTENT_FILTER_LOCATION_CHANGED);
            intentSendToMainActivity.putExtra(AppConfig.C_STR_LATITUDE, location.getLatitude());
            intentSendToMainActivity.putExtra(AppConfig.C_STR_LONGITUDE, location.getLongitude());
            sendBroadcast(intentSendToMainActivity);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    };
    locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
    if (locationManager != null) {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTimeSecondsSamplingRate, minDistMetersSamplingRate, locationListener);
        Log.i(TAG, "Starting Location Service");
    } else {
        Log.e(TAG, "Can't Start Location Service");
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (locationManager != null) {
        locationManager.removeUpdates(locationListener);
    }
}

}

アプリケーションのバッテリー最適化を無効にしようとしましたが、問題は解決しません

4

1 に答える 1

0

位置情報が 2 分以内に受信されない場合、位置情報の更新を停止/開始します。また、サービスを作成してフォアグラウンドにし、その中に位置情報更新メソッドを配置します。

ではごきげんよう

于 2018-10-24T11:08:13.130 に答える