studio quitar puedo permisos permiso necesario los inhabilitaste dar como aplicaciones administrador activar android android-manifest android-permissions android-6.0-marshmallow

quitar - Escribir almacenamiento externo no funciona hasta que reinicie la aplicación en Android M



permisos android studio (1)

Estoy teniendo un problema con el nuevo sistema de permisos. He modificado mi código para solicitar permiso para WRITE_EXTERNAL_STORAGE. Pero mi aplicación no puede escribir (o leer) en la tarjeta SD hasta que reinicie la aplicación (por supuesto, lo permití en el cuadro de diálogo). Después de eso está funcionando bien.

No es una aplicación nueva, ya declaré WRITE_EXTERNAL_STORAGE en el manifiesto, y en sistemas anteriores está funcionando bien.

Estoy usando los métodos checkSelfPermission y requestPermissions y cuando hago una solicitud de lectura o escritura a la tarjeta SD, tengo una excepción que no tengo permiso.

¿Alguien tiene alguna idea de lo que me perdí? O me encontré con un error?

La versión de SDK es la última (actualizada hace unas horas), y la estoy probando en el emulador.


Necesita Callback cuando el Usuario permita el permiso RuntimePermission dialog desde el RuntimePermission dialog .

Primero debe implementar el OnRequestPermissionsResultCallback Listener OnRequestPermissionsResultCallback de la clase ActivityCompat en su Activity y anular el void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) Método para verificar si el usuario está permitiendo o negando el permiso

Puedes hacer así:

int REQUEST_STORAGE = 1; private void checkExternalStoragePermissions() { if (hasStoragePermissionGranted()) { //You can do what whatever you want to do as permission is granted } else { requestExternalStoragePermission(); } } public boolean hasStoragePermissionGranted(){ return ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; } public void requestExternalStoragePermission() { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ ActivityCompat.requestPermissions(MainActivity.this, {Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE); } }

Aquí se onRequestPermissionsResult() método onRequestPermissionsResult() cuando el usuario permita o niegue el cuadro de diálogo Permiso desde el tiempo de ejecución.

También puede manejar la situación cuando el Usuario ha marcado nunca mostrar el cuadro de diálogo Permiso de tiempo de ejecución.

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_STORAGE) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { //User allow from permission dialog //You can do what whatever you want to do as permission is granted } else if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivtity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { //User has deny from permission dialog Snackbar.make(mainLayout, getResources().getString("Please enable storage permission"),Snackbar.LENGTH_INDEFINITE) .setAction("OK", new View.OnClickListener() { @Override public void onClick(View view) { ActivityCompat.requestPermissions(MainActivity.this, {Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE); } }) .show(); } else { // User has deny permission and checked never show permission dialog so you can redirect to Application settings page Snackbar.make(mainLayout, getResources().getString("Please enable permission from settings"),Snackbar.LENGTH_INDEFINITE) .setAction("OK", new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", MainActivity.this.getPackageName(), null); intent.setData(uri); startActivity(intent); } }) .show(); } } }

Aquí he usado Snackbar para mostrar un mensaje relevante al usuario sobre Permiso y mainLayout es la identificación del Activity''s Main Layout de la Activity''s Main Layout .

Espero que te ayude.