Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Período de tiempo de ejecución de Marshmallow

Una nueva y impresionante funcionalidad de seguridad es RUN-TIME Permiso

Estoy tratando de entenderlo y hacer una demo para eso Pero una pregunta plantea en mi mente que cuando estoy en el permiso de usuario de manejar con DIALOG.

  • Usar fuente Roboto para dispositivos anteriores
  • Error de "aplicación" de sesión al instalar APK
  • Cómo manejar un AsyncTask durante la rotación de pantalla?
  • ¿Cómo puedo crear un círculo con un número?
  • Mostrar la vista de la cámara dentro de html en android y luego tomar una foto
  • ¿Cómo logró Google lograr esto? Slide ActionBar en la aplicación de Android
  • Cómo manejar " Never ask Again "

    Introduzca aquí la descripción de la imagen

    Supongamos que mi aplicación DEBE necesitar Ubicación / contacto, pero el usuario lo NEGRA con "NUNCA PIDA DE NUEVO".

    ¿Qué puedo hacer por eso? No todos los usuarios entienden que mi campo es obligatorio.

    ¿CUALQUIER SUGERENCIA?

  • Cómo hacer clickable en toda la fila de la vista de lista?
  • Android: animación mediante programación entre imágenes en el widget Galería
  • Utilizando RelativeLayout dinámicamente y estableciendo márgenes en px, dp, inch, mm
  • Arrastrar y soltar con onDraglistener animar para volver a la posición original si no se deja caer en el objetivo
  • Reemplazar un fragmento por otro fragmento
  • Rest Server o API para probar mi cliente Restful?
  • 4 Solutions collect form web for “Período de tiempo de ejecución de Marshmallow”

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

    Puedes hacer esto. Aquí compruebo el acceso de permiso para WRITE_EXTERNAL_STORAGE :

     int REQUEST_STORAGE = 1; private void checkPermissions() { if (hasStoragePermissionGranted()) { // you can do whatever you want } else { requestPermission(); } } public boolean hasPermissionGranted(){ return ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; } public void requestPermission() { 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 permite o deniega el permiso de permiso de Runtime.

    También puede manejar la situación cuando el usuario ha marcado nunca mostrar diálogo de permiso de ejecución para que pueda mostrar Snackbar o botón para redirigir al usuario a la página de configuración de la aplicación, ya que no se puede mostrar el diálogo de permiso después de que el usuario ha marcado "Never ask again" .

     @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_STORAGE) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { //Storage permission is enabled canSendAttachments = true; systemLogsCheckbox.setEnabled(true); } 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 utilizado Snackbar para mostrar el mensaje relevante al usuario sobre el permiso y mainLayout es id de Activity's Main Layout de la Activity's Main Layout .

    Espero que te ayude.

    He creado una library que maneja todos los permissions para usted. Usted puede encontrarlo aquí:

    PermissionHelper


    Para responder tu pregunta:

    Para que usted sepa si el usuario ha checked nunca se mostrará de nuevo, tendrá que comprobar contra dos cosas, si se declined el permiso y no explanation needed si estos dos devuelven **true** significa que el permiso ya no está disponible Para ser preguntado de nuevo y la única solución para manejar este caso es abrir la pantalla de configuración.

    PS: la biblioteca que he creado manejar todos estos tipos de escenarios para usted y devuelve devoluciones de llamada para que usted decida qué hacer a continuación !. La biblioteca tiene dos implementaciones

    1. Implementación manual (lo que significa que tendrá que implementar la devolución de llamada en su actividad y escuchar la devolución de llamada devuelta desde la biblioteca).
    2. Permita que la biblioteca solicite el permiso para usted y también le devolverá una devolución de llamada para que decida qué sucede cuando el permiso se deniega permanentemente.

    Abra la configuración de su aplicación cuando el usuario seleccione "Nerver ask again"

     Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, REQUEST_PERMISSION_SETTING); 

    Mi ejemplo para manejar RuntimePermission:
    https://github.com/henrychuangtw/RuntimePermission

    Paso 1: use la biblioteca de PermissionsDispatcher por hotchemi (la biblioteca es basada en anotaciones, fácil de usar y bien documentada)

    Paso 2: tiene que proporcionar 4 métodos anotados y uno de ellos es @OnNeverAskAgain (Manifest.permission. [Permission_you_want]) como a continuación

     @OnNeverAskAgain(Manifest.permission.[permission_you_want]) void showNeverAsk() { // handle here } 

    Aquí está la muestra

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.