Solicitando permissões em tempo de execução, o Android M +

Em primeiro lugar, sei que essa é uma pergunta duplicada, mas já superei as respostas de outras perguntas semelhantes e não consegui encontrar sucesso com nenhuma dessas soluções.

Eu desenvolvi um aplicativo que funciona perfeitamente no meu dispositivo de teste, que é um Samsung S4 executando o Android L (5.0.1), no entanto, eu gostaria que esse aplicativo também funcionasse em versões mais recentes do Android.

Entendo que as permissões de solicitação foram alteradas para o Android M +, de modo que elas precisam ser solicitadas em tempo de execução, mas quando tento implementar isso a caixa de diálogo nunca aparece e, portanto, as permissões necessárias nunca são solicitadas.

A permissão que estou solicitando éACCESS_FINE_LOCATION.

Aqui está o código relevante do meu arquivo de manifesto:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Onde solicito permissão se ainda não tiver sido concedida:

if (ActivityCompat.checkSelfPermission(MapsActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

    startGeofenceMonitoring();

} else {
    askForPermission(android.Manifest.permission.ACCESS_FINE_LOCATION,LOCATION);
}

Função askForPermission (ligeiramente modificada do exemplo do Google):

private void askForPermission(String permission, Integer requestCode) {
    if (ContextCompat.checkSelfPermission(MapsActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(MapsActivity.this, permission)) {

            //This is called if user has denied the permission before
            //In this case I am just asking the permission again
            ActivityCompat.requestPermissions(MapsActivity.this, new String[]{permission}, requestCode);

        } else {

            Log.d(TAG, "askForPermission: " + permission);

            ActivityCompat.requestPermissions(MapsActivity.this, new String[]{permission}, requestCode);
        }
    } else {
        Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show();
    }
}

E a função onRequestPermissionsResult:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    Log.d(TAG, "onRequestPermissionsResult: " + requestCode);

        switch (requestCode) {
            case 1:
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    Log.d(TAG, "onRequestPermissionsResult: request");

                    Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();

                    startGeofenceMonitoring();
                }
                break;
        }
}

Como eu disse, a caixa de diálogo que solicita as permissões nunca aparece, mas meu console me diz queActivityCompat.requestPermissions(MapsActivity.this, new String[]{permission}, requestCo,de); é chamado e, depois de muita pesquisa, ainda não sei ao certo por que não está funcionando. A única coisa que acho que pode ser devido a esta atividade é uma atividade de fragmento que exibe um mapa do Google Maps. Tentei solicitar as permissões em outra atividade, mas exatamente a mesma coisa acontece.

Obrigado.

EDITAR

Então, acabei de testar o código que publiquei aqui em um projeto completamente novo, que funcionou perfeitamente e mostrou a caixa de diálogo. Agora estou realmente confuso sobre o que está impedindo que esta caixa de diálogo seja mostrada no meu projeto atual.

questionAnswers(3)

yourAnswerToTheQuestion