El permiso de tiempo de ejecución en Android que se introdujo en Marshmallow y, debido a estos permisos de tiempo de ejecución, el usuario puede otorgar permiso a la aplicación en tiempo de ejecución, también mientras escribe el código para los permisos de tiempo de ejecución. A veces, manejar la tarea de solicitar permisos se vuelve tan difícil y el desarrollador tiene que escribir una gran cantidad de código. Así que veremos hacia la implementación de los permisos Runtime en Android usando Dexter .
¿Qué es Dexter en Android?
Dexter es la biblioteca que nos ayudará a facilitar esta tarea para manejar los permisos de tiempo de ejecución en Android. Ahora veremos la implementación de esto en nuestra aplicación de Android.
¿Qué vamos a construir en este artículo?
Construiremos una aplicación simple en la que mostraremos un botón al usuario. Después de hacer clic en ese botón, mostraremos los permisos de tiempo de ejecución al usuario. Entonces, si los usuarios niegan el permiso, mostramos la opción para abrir la pantalla de configuración y otorgar los permisos. A continuación se muestra el breve video en el que veremos lo que vamos a construir en este artículo.
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: agregue la dependencia de los permisos de tiempo de ejecución de Dexter en el archivo build.gradle
Navegue hasta los scripts de gradle y luego hasta el nivel build.gradle (Módulo). Agregue la siguiente línea en el archivo build.gradle en la sección de dependencias.
implementación ‘com.karumi:dexter:6.2.2’
Después de agregar esta dependencia, ahora sincronice su proyecto. Pasemos a la parte XML.
Paso 3: trabajar con el archivo activity_main.xml
Vaya al archivo activity_main.xml y consulte el siguiente código. A continuación se muestra el código para el archivo activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!--Button to request permissions--> <Button android:id="@+id/idBtnRequestPermission" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Request Permission" android:textAllCaps="false" /> </RelativeLayout>
Paso 4: trabajar con el archivo MainActivity.java
Vaya al archivo MainActivity.java y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.
Java
import android.Manifest; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.karumi.dexter.Dexter; import com.karumi.dexter.MultiplePermissionsReport; import com.karumi.dexter.PermissionToken; import com.karumi.dexter.listener.DexterError; import com.karumi.dexter.listener.PermissionRequest; import com.karumi.dexter.listener.PermissionRequestErrorListener; import com.karumi.dexter.listener.multi.MultiplePermissionsListener; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // initializing our button and adding on click listener to it. Button requestPermissionsBtn = findViewById(R.id.idBtnRequestPermission); requestPermissionsBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // inside on click listener calling // method to request permission requestPermissions(); } }); } private void requestPermissions() { // below line is use to request // permission in the current activity. Dexter.withActivity(this) // below line is use to request the number of // permissions which are required in our app. .withPermissions(Manifest.permission.CAMERA, // below is the list of permissions Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_CONTACTS) // after adding permissions we are // calling an with listener method. .withListener(new MultiplePermissionsListener() { @Override public void onPermissionsChecked(MultiplePermissionsReport multiplePermissionsReport) { // this method is called when all permissions are granted if (multiplePermissionsReport.areAllPermissionsGranted()) { // do you work now Toast.makeText(MainActivity.this, "All the permissions are granted..", Toast.LENGTH_SHORT).show(); } // check for permanent denial of any permission if (multiplePermissionsReport.isAnyPermissionPermanentlyDenied()) { // permission is denied permanently, // we will show user a dialog message. showSettingsDialog(); } } @Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> list, PermissionToken permissionToken) { // this method is called when user grants some // permission and denies some of them. permissionToken.continuePermissionRequest(); } }).withErrorListener(new PermissionRequestErrorListener() { // this method is use to handle error // in runtime permissions @Override public void onError(DexterError error) { // we are displaying a toast message for error message. Toast.makeText(getApplicationContext(), "Error occurred! ", Toast.LENGTH_SHORT).show(); } }) // below line is use to run the permissions // on same thread and to check the permissions .onSameThread().check(); } // below is the shoe setting dialog // method which is use to display a // dialogue message. private void showSettingsDialog() { // we are displaying an alert dialog for permissions AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // below line is the title // for our alert dialog. builder.setTitle("Need Permissions"); // below line is our message for our dialog builder.setMessage("This app needs permission to use this feature. You can grant them in app settings."); builder.setPositiveButton("GOTO SETTINGS", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // this method is called on click on positive // button and on clicking shit button we // are redirecting our user from our app to the // settings page of our app. dialog.cancel(); // below is the intent from which we // are redirecting our user. Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, 101); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // this method is called when // user click on negative button. dialog.cancel(); } }); // below line is used // to display our dialog builder.show(); } }
Paso 5: agregar los permisos necesarios en el archivo de manifiesto
Vaya a la aplicación > archivo AndroidManifest.xml y agréguele los siguientes permisos.
XML
<!-- Permissions we are requesting from user --> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.READ_CONTACTS"/>
Después de agregar estos permisos en nuestro archivo AndroidManifest.xml. Ahora ejecute nuestra aplicación y vea el resultado del código.
Producción:
Publicación traducida automáticamente
Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA