Après Android 11, il existe de nouvelles exigences pour la gestion des droits d'accès en lecture et en écriture des fichiers et Android 10, entraînant l'erreur : la méthode d'application pour les autorisations de gestion de fichiers Android 11
import android.provider.Settings
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R){
val uri = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
startActivity(
Intent(
Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
uri
)
)
}
Rappel de l'application d'autorisation d'accès aux fichiers Android 10
Étape 1 : Ajouter la configuration de l'application d'autorisation dans AndroidManifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<application android:requestLegacyExternalStorage="true">
<provider android:name="androidx.core.content.FileProvider"
android:authorities="com.xxx.xxx.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths_app" />
</provider>
</application>
Étape 2 : Créez file_paths_app.xml sous le dossier de ressources res/xml. Le nom peut être arbitraire et il est synchronisé avec la configuration des ressources dans le fournisseur.
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<external-path
name="external-path"
path="." />
<external-files-path
name="external-files-path"
path="." />
<external-cache-path
name="external-cache-path"
path="." />
<files-path
name="files-path"
path="." />
<cache-path
name="cache-path"
path="." />
</paths>
</resources>
Le chemin correspondant au Tag répertoire racine chemin-racine/ files-path /data/user/0/<package_name>/files ou /data/data/<package_name>/files Ces deux répertoires pointent vers le même emplacement cache-path /data/user/0/<package_name>/cache 或者 /data/data/<package_name>/cache chemin-externe /storage/emulated/0 ou /sdcard/ external-files-path /storage/emulated/0/Android/data/<package_name>/files 或者 /sdcard/Android/data/<package_name>/files external-cache-path /storage/emulated/0/Android/data/<package_name>/cache 或者 /sdcard/Android/data/<package_name>/cache
Étape 3 : Appelez l'application d'autorisation de lecture et d'écriture de fichier
AppPermissionReq.INSTANCE.permissionReq(
this,
defPermissions,
object : PassPermission {
override fun unauthorized() {
}
override fun authorized() {
}
})