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:
- Cómo seguir usando los cambios de favoritos del navegador en Android 6.0 (API 23)
- Cómo obtener la historia y los marcadores de Chrome en Android Marshmallow (API> = 23)?
- ¿Dónde está adb en Android 6? ¿Se elimina?
- SYSTEM_ALERT_WINDOW - Cómo obtener este permiso automáticamente en Android 6.0 y targetSdkVersion 23
- La mejor práctica para obtener json de url en api 23
<?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'
- IndexOutOfBoundsException después de repoblar ArrayList (sólo Marshmallow)
- Reconocimiento de actividad Ejecutar permisos en android 6.0
- Crash casting AndroidKeyStoreRSAPrivateKey a RSAPrivateKey
- La notificación de grupo de Android no se activa después de agregar la notificación de resumen (Android 6.0)
- El botón ALLOW no funciona después de la actualización
- ¿Apoyará Samsung la API de huellas dactilares de Google de Marshmallow?
- Actualizar Android APK de la arquitectura nativa a la no nativa conduce a fallos en dispositivos de 64 bits
- Permisos de tiempo de ejecución de Android: cómo implementar
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
- Android TimePicker no se muestra bien en modo horizontal
- Android: cómo mostrar el gridview en blanco con el botón