Uso FileProvider para generar un uri, luego quiero pasarlo a BroadcastReceiver en otra aplicación, pero solo obtengo la excepción de "Permission Denial: opening provider" , ¿cómo puedo solucionarlo?
Hay dos aplicaciones: Sender & Receiver, luego Sender desea compartir un archivo con Receiver, pero Receiver no necesita una interfaz de usuario, procesa el archivo en segundo plano , por lo que uso Broadcast en lugar de Activity para hacerlo. Pero solo me sale "Permission Denial"
<provider android:name="androidx.core.content.FileProvider" android:authorities="com.sender" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_path_config"/> </provider> archivo_ruta_config.xml <?xml version="1.0" encoding="utf-8"?> <paths> <external-path name="external" path="."/> </paths> enviarBroadcast var intent = Intent().apply { action = "com.action" component = ComponentName( "com.receiver", "com.receiver.MyReceiver" ) } intent.data = FileProvider.getUriForFile( this, "com.sender", File("/storage/emulated/0/Cmd/zxz") ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION) grantUriPermission("com.receiver", intent.data, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) sendBroadcast(intent) <receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.action"/> <data android:mimeType="*/*" android:scheme="content"/> </intent-filter> </receiver> MiReceptor override fun onReceive(context: Context, intent: Intent) { intent.data?.apply { val inputStream = context.contentResolver.openInputStream(this) Log.i(TAG, "onReceive: $inputStream") inputStream?.close() } } Lo intento muchas veces, pero solo Caused by: java.lang.SecurityException: Permission Denial: opening provider androidx.core.content.FileProvider from ProcessRecord y luego falla.
Pero cuando uso Actividad en lugar de Difusión, funciona bien.
La documentación de FileProvider menciona que la vigencia del permiso está vinculada a la vigencia de la Actividad o Servicio receptor. No dice nada sobre los receptores de difusión. Así que supongo que no pueden manejar tales intentos sin obtener esta SecurityException.