OnRequestPermissionsResult no se devuelve en una actividad de Android

Estoy tratando de obtener el permiso de la cámara del usuario antes de iniciar la actividad de mi cámara. onRequestPermissionsResult nunca se vuelve a llamar después de que el usuario presiona "Permitir" en el diálogo de permisos. Aquí está mi clase de actividad:

public class ImageCaptureActivity extends AppCompatActivity { public static final String TAG = ImageCaptureActivity.class.getSimpleName(); private static final int REQUEST_CAMERA = 0; private static final int REQUEST_CAMERA_PERMISSION = 1; private Point mSize; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_capture); Display display = getWindowManager().getDefaultDisplay(); mSize = new Point(); display.getSize(mSize); // Request for Camera Permission requestForCameraPermission(findViewById(android.R.id.content)); } /** * @param view * @brief requestForCameraPermission */ public void requestForCameraPermission(View view) { Log.v(TAG, "Requesting Camera Permission"); final String permission = Manifest.permission.CAMERA; if (ContextCompat.checkSelfPermission(ImageCaptureActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(ImageCaptureActivity.this, permission)) { showPermissionRationaleDialog(getString(R.string.camera_permission_rationale), permission); } else { requestForPermission(permission); } } else { launch(); } } /** * @param message * @param permission * @brief showPermissionRationaleDialog */ private void showPermissionRationaleDialog(final String message, final String permission) { new AlertDialog.Builder(ImageCaptureActivity.this) .setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ImageCaptureActivity.this.requestForPermission(permission); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create() .show(); } /** * @param permission * @brief requestForPermission */ private void requestForPermission(final String permission) { ActivityCompat.requestPermissions(ImageCaptureActivity.this, new String[]{permission}, REQUEST_CAMERA_PERMISSION); } /** * @brief launch */ private void launch() { Log.v(TAG, "Camera Permission Granted, launching the CameraActivity"); String documentId = getIntent().getStringExtra(IntentNames.INTENT_EXTRA_WIP_DOCUMENT_ID); Intent startCustomCameraIntent = new Intent(this, CameraActivity.class); startCustomCameraIntent.putExtra(IntentNames.INTENT_EXTRA_WIP_DOCUMENT_ID, documentId); startActivityForResult(startCustomCameraIntent, REQUEST_CAMERA); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CAMERA_PERMISSION: final int numOfRequest = grantResults.length; final boolean isGranted = numOfRequest == 1 && PackageManager.PERMISSION_GRANTED == grantResults[numOfRequest - 1]; Log.v(TAG, "Camera Permission callback on onRequestPermissionsResult"); if (isGranted) { launch(); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } } 

Aquí está mi Manifiesto de la aplicación con el permiso de cámara:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myapp.testpackage"> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera.front" android:required="true" /> <uses-feature android:name="android.hardware.camera2" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application 

Mi Gradle Dependencia:

 compile 'com.android.support:appcompat-v7:24.0.0' compile 'com.android.support:design:24.0.0' compile 'com.android.support:support-v4:24.0.0' 

He intentado su código yo mismo y todo funciona bien. Creo que lo único que puede ser un problema es el escenario cuando su actividad tiene estos dos indicadores:

  android:noHistory="true" android:excludeFromRecents="true" 

Aquí está un tipo que explica el problema: https://stackoverflow.com/a/35772265/5281581

  • Permisos de Android M al compartir datos con otras aplicaciones
  • DownloadManager descargar lento en Android 6
  • Prohibido degradar los dispositivos que utilizaban permisos M anteriormente
  • VISTA PREVIA - Google Nexus 5X - 6.0.0 (API 23) Gapps
  • ¿Cómo utilizar la nueva función de Android M de "Selección de texto" que se ofrece desde fuera de la aplicación?
  • Android Marshmallow: cambio de permisos para la aplicación en ejecución
  • Todos los permisos de mi aplicación se revocan después de presionar "Restablecer las preferencias de la aplicación"
  • Android: Activar / desactivar WiFi Hotspot mediante programación en Android Marshmallow (6.0)
  • Android M: revoca los permisos mediante programación
  • ¿Por qué mi BroadcastReceive causa una denegación READ_PRIVILEGED_PHONE_STATE en M?
  • Marshmallow: No se puede ejecutar Settings.System.canWrite (Context) desde un servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.