varios studio shouldshowrequestpermissionrationale requestpermissions permission permisos pedir onrequestpermissionsresult multiples example android android-permissions android-6.0-marshmallow

android - studio - ¿Cómo verificar los permisos de subvenciones en tiempo de ejecución?



requestpermissions android example (9)

Agradable !!

Acabo de encontrar mi necesidad, podemos verificar si el permiso es otorgado por:

checkSelfPermission(Manifest.permission.READ_CONTACTS)

Solicitar permisos si es necesario

if (checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an // app-defined int constant return; }

Manejar la respuesta de solicitud de permisos

@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! do the // calendar task you need to do. } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } // other ''switch'' lines to check for other // permissions this app might request } }

En Android M (Vista previa), el usuario puede elegir una aplicación específica y recuperar un permiso específico.

Entonces, estoy preguntando ¿Cómo verificar los permisos de subvenciones en tiempo de ejecución ?



Para permiso de tiempo de ejecución de ubicación

ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1); public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 1: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.d("yes","yes"); } else { Log.d("yes","no"); // permission denied, boo! Disable the // functionality that depends on this permission. } return; } // other ''case'' lines to check for other // permissions this app might request } }


Pruebe este código de solicitud simple
https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html

public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1; private boolean checkAndRequestPermissions() { int camera = ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA); int storage = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE); int loc = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION); int loc2 = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION); List<String> listPermissionsNeeded = new ArrayList<>(); if (camera != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(android.Manifest.permission.CAMERA); } if (storage != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (loc2 != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(android.Manifest.permission.ACCESS_FINE_LOCATION); } if (loc != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(android.Manifest.permission.ACCESS_COARSE_LOCATION); } if (!listPermissionsNeeded.isEmpty()) { ActivityCompat.requestPermissions(this,listPermissionsNeeded.toArray (new String[listPermissionsNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS); return false; } return true; }


Pruebe esto para verificar el permiso de tiempo de ejecución:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); checkRunTimePermission(); }

Verifique el permiso de tiempo de ejecución:

private void checkRunTimePermission() { String[] permissionArrays = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(permissionArrays, 11111); } else { // if already permition granted // PUT YOUR ACTION (Like Open cemara etc..) } }

Resultado del permiso de manejo:

@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); boolean openActivityOnce = true; boolean openDialogOnce = true; if (requestCode == 11111) { for (int i = 0; i < grantResults.length; i++) { String permission = permissions[i]; isPermitted = grantResults[i] == PackageManager.PERMISSION_GRANTED; if (grantResults[i] == PackageManager.PERMISSION_DENIED) { // user rejected the permission boolean showRationale = shouldShowRequestPermissionRationale(permission); if (!showRationale) { //execute when ''never Ask Again'' tick and permission dialog not show } else { if (openDialogOnce) { alertView(); } } } } if (isPermitted) if (isPermissionFromGallery) openGalleryFragment(); } }

Establecer alerta personalizada:

private void alertView() { AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity(), R.style.MyAlertDialogStyle); dialog.setTitle("Permission Denied") .setInverseBackgroundForced(true) //.setIcon(R.drawable.ic_info_black_24dp) .setMessage("Without those permission the app is unable to save your profile. App needs to save profile image in your external storage and also need to get profile image from camera or external storage.Are you sure you want to deny this permission?") .setNegativeButton("I''M SURE", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { dialoginterface.dismiss(); } }) .setPositiveButton("RE-TRY", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { dialoginterface.dismiss(); checkRunTimePermission(); } }).show(); }


También puede consultar siguiendo el fragmento de código como compatible con versiones anteriores;

int hasPermission = ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_CONTACTS); if (hasPermission == PackageManager.PERMISSION_GRANTED) { //Do smthng }


publicación original (no mía) here

Para permisos especiales, como android.Manifest.permission.PACKAGE_USAGE_STATS utiliza AppOpsManager :
Kotlin

private fun hasPermission(permission:String, permissionAppOpsManager:String): Boolean { var granted = false if (VERSION.SDK_INT >= VERSION_CODES.M) { // requires kitkat val appOps = applicationContext!!.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager // requires lollipop val mode = appOps.checkOpNoThrow(permissionAppOpsManager, android.os.Process.myUid(), applicationContext!!.packageName) if (mode == AppOpsManager.MODE_DEFAULT) { granted = applicationContext!!.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED } else { granted = mode == AppOpsManager.MODE_ALLOWED } } return granted }

y en cualquier parte del código:

val permissionAppOpsManager = AppOpsManager.OPSTR_GET_USAGE_STATS val permission = android.Manifest.permission.PACKAGE_USAGE_STATS val permissionActivity = Settings.ACTION_USAGE_ACCESS_SETTINGS if (hasPermission(permission, permissionAppOpsManager)) { Timber.i("has permission: $permission") // do here what needs permission } else { Timber.e("has no permission: $permission") // start activity to get permission startActivity(Intent(permissionActivity)) }

Otros permisos que puede obtener con la biblioteca TedPermission


usar la biblioteca Dexter

Incluya la biblioteca en su build.gradle

dependencies{ implementation ''com.karumi:dexter:4.2.0'' }

Este ejemplo solicita WRITE_EXTERNAL_STORAGE.

Dexter.withActivity(this) .withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) .withListener(new PermissionListener() { @Override public void onPermissionGranted(PermissionGrantedResponse response) { // permission is granted, open the camera } @Override public void onPermissionDenied(PermissionDeniedResponse response) { // check for permanent denial of permission if (response.isPermanentlyDenied()) { // navigate user to app settings } } @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) { token.continuePermissionRequest(); } }).check();

mira esta respuesta here


fun hasPermission(permission: String): Boolean { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true // must be granted after installed. return mAppSet.appContext.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED }