Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

208
Views
Funciones auxiliares de permisos de Android

Tengo una actividad que requiere permiso de cámara.

esta actividad se puede llamar desde varios lugares configurables por el usuario en la aplicación.

El diálogo de justificación y el diálogo de permiso deben mostrarse antes de que se abra la actividad.

ocurrencia

ahora mismo estoy tratando de manejar estos diálogos en algún tipo de función de extensión.

 fun handlePermissions(context: Context, required_permissions: Array<String>, activity: FragmentActivity?, fragment: Fragment?): Boolean { var isGranted = allPermissionsGranted(context, required_permissions) if (!isGranted) { //null here is where I used to pass my listener which was the calling fragment previously that implemented an interface val dialog = DialogPermissionFragment(null, DialogPermissionFragment.PermissionType.QR) activity?.supportFragmentManager?.let { dialog.show(it, "") } //get result from dialog? how? //if accepted launch actual permission request fragment?.registerForActivityResult(ActivityResultContracts.RequestPermission()) { success -> isGranted = success }?.launch(android.Manifest.permission.CAMERA) } return isGranted }

Pero tengo problemas para recuperar los resultados del diálogo de justificación/explicación.

Mi investigación hasta ahora me llevó a quizás usar una función de orden superior, para pasar una variable de función al fragmento de diálogo que devuelve un valor booleano a la función auxiliar. Pero no estoy absolutamente seguro de si eso es lo correcto.

Pensé que usar mi propio código sería más limpio y menos costoso, ¿podría lograr esto más fácilmente al usar un marco como eazy-permissions? (Dexter sigue siendo recomendable ya que ya no está en desarrollo)

¿Es eso algo viable que estoy tratando de lograr aquí?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Un enfoque que he implementado y parece viable de usar es este:

Ayudante de PermissionsHelper de clase

 class PermissionsHelper(private val activity: Activity) { fun requestPermissionsFromDevice( arrayPermissions: Array<String>, permissionsResultInterface: PermissionsResultInterface ) { setPermissionResultInterface(permissionsResultInterface) getMyPermissionRequestActivity().launch(arrayPermissions) } fun checkPermissionsFromDevice(permission: String): Boolean { return ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED } }

Class PermissionsResultInterface para que la clase auxiliar pueda comunicarse con la actividad.

 interface PermissionsResultInterface { fun onPermissionFinishResult(permissions: MutableMap<String, Boolean>) }

Uso con este enfoque para eliminar todos los archivos del directorio de la aplicación:

 private fun clearFiles(firstCall: Boolean = false) { if (verifyStoragePermissions(firstCall)) { val dir = File(getExternalFilesDir(null).toString()) removeFileOrDirectory(dir) Toast.makeText( applicationContext, resources.getString(R.string.done), Toast.LENGTH_SHORT ).show() } } private fun verifyStoragePermissions(firstCall: Boolean = false): Boolean { val arrayListPermissions = arrayOf( android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE ) for (permission in arrayListPermissions) { if (!PermissionsHelper(this).checkPermissionsFromDevice(permission)) { if (firstCall) PermissionsHelper(this) .requestPermissionsFromDevice(arrayListPermissions, this) else PermissionsDialogs(this).showPermissionsErrorDialog() return false } } return true } override fun onPermissionFinishResult(permissions: MutableMap<String, Boolean>) { clearFiles() }

Con este enfoque, puede llamar al ayudante de permisos y usar la interfaz de resultados, después de cada una de las respuestas del usuario, decidir si aún necesita hacer una llamada para obtener permisos o mostrarle un cuadro de diálogo.

Si necesitas ayuda no dudes en contactarme.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!