studio riesgosos requesting permisos permiso peligrosos pedir para leer internet contactos almacenamiento android permissions android-emulator android-external-storage android-developer-api

riesgosos - permisos en android



SecurityException: DenegaciĆ³n de permiso: lectura(solo en el emulador) (3)

Antes de llamar al método, verifique el permiso.

private void checkPermission(){ int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Constants.WRITE_EXTERNAL_STORAGE); } else { callMethod(); } }

Verifique el resultado del permiso.

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case Constants.WRITE_EXTERNAL_STORAGE: if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { callMethod(); } break; default: break; } }

Tengo dos actividades en mi aplicación, MainActivity llama ImagePicker, que tiene un GridView que presenta todas las imágenes en la galería del teléfono, donde uso un ContentResolver para obtener el cursor.

Funcionó bien en mi teléfono cuando lo probé, pero se bloqueó cada vez al instante en el emulador.

Aquí está el registro de errores:

java.lang.SecurityException: Denegación de permiso: lectura com.android.providers.media.MediaProvider uri content: // media / external / images / media from pid = 5934, uid = 10060 requiere android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission ()

Tengo permiso escrito en manifiesto, como se muestra a continuación:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ImagePicker" /> </application>


¿Qué versión de Android es tu emulador? ¿Y estás compilando con SDK 23? Si su emulador es Marshmallow, debe verificar explícitamente el permiso en tiempo de ejecución. Esto se debe al nuevo modelo de permisos.

Consulte la documentación sobre permisos para obtener más información: https://developer.android.com/training/permissions/index.html


Si su versión de destino de la aplicación es 23, entonces le dará este error. Si su requisito incluye el nivel 23 de API, entonces debe establecer el objetivo 23 y debe verificar los permisos dinámicamente. Este es el ejemplo del sitio de desarrolladores. https://developer.android.com/training/permissions/requesting.html

Nota: Incluso si le asigna un objetivo 22 o inferior, también su aplicación funcionará con 23 sin este error (verifique el permiso).