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 prueba el comportamiento de copia de seguridad completa de Android 6.0?
- Android 6.0 Marsmallow BLE: Parámetros de conexión
- ¿Algún modo de vincular a la configuración de notificación de Android para mi aplicación?
- Android Marshmallow ScanSetting
- Android consigue la dirección del bluetooth en la melcocha
<?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'
- Android M solicita permisos con grupos de permisos
- Cómo obtener un error en recreate () dentro de onOptionsItemSelected () en API 23 / Marshmallow
- Cómo abrir mediante programación la pantalla de permisos para una aplicación específica en Android Marshmallow?
- Cómo comprobar la ubicación de Mock en Android Marshmallow?
- Cancelar una solicitud de permisos de tiempo de ejecución iniciada mediante Notificación
- Android: Buscar llamadas de la API que requieren permisos
- Android Marshmallow: cambio de permisos para la aplicación en ejecución
- Crash casting AndroidKeyStoreRSAPrivateKey a RSAPrivateKey
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