O reconhecimento de atividade não funciona depois que o telefone adormece

Isenção de responsabilidade: isso não é duplicado deO Reconhecimento de atividade para de receber atualizações quando o telefone entra em espera (tela desligada) porque eu já estou usando essa abordagem e não ajuda.

Problema:

Parece que o serviço de reconhecimento de atividade para de funcionar e não está enviando nenhuma atualização quando o dispositivo entra no modo de espera. Funciona bem (atividades reconhecidas são armazenadas no sqlite) quando o dispositivo não está no modo de espera, mas assim que eu pressiono o botão liga / desliga no HTC M8, nada é armazenado a partir deste momento até que eu acorde o dispositivo, mas pressione novamente o botão liga / desliga.

Alguns detalhes de como estou fazendo o reconhecimento de atividades:

Solicitando atualizações de reconhecimento de atividades se parece com isso (tirado deamostras oficiais do google mas eu mudeiIntentService paraBroadcastReceiver):

public class DevActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    //...

    private PendingIntent getActivityDetectionPendingIntent() {
        Intent intent = new Intent(this, ActRecReceiver.class);
        return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    }

    public void requestActivityUpdatesButtonHandler(View view) {
        if (!googleApiClient.isConnected()) {
            Toast.makeText(this, "not_connected", Toast.LENGTH_SHORT).show();
            return;
        }
        final Preferences pref = new Preferences(this);
        ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(
                googleApiClient,
                pref.getActRecInterval(0),
                getActivityDetectionPendingIntent()
        ).setResultCallback(this);
    }

}

Recebendo atualizações de reconhecimento de atividades se parece com isso (padrãoWakefulBroadcastReceiver + IntentService cooperação)

public class ActRecReceiver extends WakefulBroadcastReceiver {

    private static final String TAG = "ActRecReceiver";
    private static final boolean LOG = BuildConfig.LOGGING;

    @Override
    public void onReceive(Context context, Intent intent) {

        if (LOG) Log.d(TAG, "onReceive");
        Intent serviceStarter = new Intent(context, DetectedActivitiesIntentService.class);
        serviceStarter.putExtra("ActivityRecognitionResult", ActivityRecognitionResult.extractResult(intent));
        startWakefulService(context, serviceStarter);
    }
}

public class DetectedActivitiesIntentService extends IntentService {

    protected static final String TAG = "DetectedActivitiesIS";

    public DetectedActivitiesIntentService() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        ActivityRecognitionResult result = intent.getParcelableExtra("ActivityRecognitionResult");
        List<DetectedActivity> detectedActivities = result.getProbableActivities();
        HashMap<Integer, Integer> detectedActivitiesMap = new HashMap<>();
        for (DetectedActivity activity : detectedActivities) {
            detectedActivitiesMap.put(activity.getType(), activity.getConfidence());
        }

        storeEventToSqlite(detectedActivitiesMap);

        ActRecReceiver.completeWakefulIntent(intent);
    }
}

estou a usarcompile 'com.google.android.gms:play-services-location:8.1.0'

EDIT1:

Depois de ler as dicas do usuário bjiang e esta respostahttps://stackoverflow.com/a/32965481/2401535 parece que há algum problema nos dispositivos HTC porque NÃO funciona como o api docs do Reconhecimento de Atividade diz:

Para economizar bateria, os relatórios de atividades podem parar quando o dispositivo fica "AINDA" por um longo período de tempo. Ele será retomado assim que o dispositivo se mover novamente. Isso acontece apenas em dispositivos que suportam o hardware Sensor.TYPE_SIGNIFICANT_MOTION.

HTC M8 realmente suportaSensor.TYPE_SIGNIFICANT_MOTION então o reconhecimento de atividade deve começar novamente depoisdevice moves again. Mas NÃO. Inicia o reconhecimento da atividade depois que eu acordo o dispositivo com o botão liga / desliga.

questionAnswers(0)

yourAnswerToTheQuestion