lang:android:permission
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
lang:android:permission [2022/09/26 09:44] – Création avec "Demande d'accès explicites pour permissions multiples" et "Demande d'accès sur événements" root | lang:android:permission [2023/04/12 13:37] (Version actuelle) – Ajout de "Autorisation avec adb" root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ===Demande | + | ====Demande de permissions==== |
+ | ===Demande explicites pour permissions multiples=== | ||
<code java> | <code java> | ||
Ligne 13: | Ligne 14: | ||
String[] ask_permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE, | String[] ask_permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE, | ||
Manifest.permission.READ_EXTERNAL_STORAGE}; | Manifest.permission.READ_EXTERNAL_STORAGE}; | ||
- | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { | + | |
- | ask_permission = Arrays.copyOf(ask_permission, | + | |
- | ask_permission[ask_permission.length-1] = Manifest.permission.MANAGE_EXTERNAL_STORAGE; | + | |
- | } | + | |
requestPermissionLauncher.launch(ask_permission); | requestPermissionLauncher.launch(ask_permission); | ||
</ | </ | ||
Ligne 77: | Ligne 75: | ||
* '' | * '' | ||
+ | |||
+ | Déclarer la liste des droits nécessaires. | ||
<code xml> | <code xml> | ||
Ligne 98: | Ligne 98: | ||
</ | </ | ||
- | * Filtrer les devices USB dans '' | + | * Filtrer les devices USB autorisés |
<code xml> | <code xml> | ||
Ligne 107: | Ligne 107: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | ===Permission se demandant via une fenêtre dédiée et non une simple popup=== | ||
+ | |||
+ | Exemple avec '' | ||
+ | |||
+ | * Avant API 30 | ||
+ | |||
+ | Il faut ajouter '' | ||
+ | |||
+ | * A partir de l'API 30 | ||
+ | |||
+ | Cela se fait en ouvrant une fenêtre dédiée à la modification des droits. On commence par vérifier si on a les droits avant. Puis on vérifie si on a les droits à la fermeture de la fenêtre. | ||
+ | |||
+ | Ne pas appelé '' | ||
+ | |||
+ | Le composant '' | ||
+ | |||
+ | < | ||
+ | |||
+ | <code java> | ||
+ | private ActivityResultLauncher< | ||
+ | |||
+ | public void onCreate(Bundle savedInstanceState) | ||
+ | requestManageAllFilesLauncher = registerForActivityResult( | ||
+ | new ActivityResultContracts.StartActivityForResult(), | ||
+ | result -> { | ||
+ | if (Environment.isExternalStorageManager()) { | ||
+ | // Accès validé. | ||
+ | } | ||
+ | } | ||
+ | ); | ||
+ | |||
+ | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) { | ||
+ | Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); | ||
+ | Uri uri = Uri.fromParts(" | ||
+ | intent.setData(uri); | ||
+ | requestManageAllFilesLauncher.launch(intent); | ||
+ | } else { | ||
+ | // OK | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Message d' | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ===Autorisation avec adb=== | ||
+ | |||
+ | Pour les tests, il peut être nécessaire d' | ||
+ | |||
+ | <code bash> | ||
+ | adb shell appops set --uid com.package MANAGE_EXTERNAL_STORAGE allow | ||
+ | </ | ||
+ | |||
+ | Pour avoir la liste des permissions, | ||
+ | |||
+ | <code bash> | ||
+ | adb shell 'pm list permissions | sort' | ||
+ | </ | ||
+ | |||
+ | ====Permission des dossiers==== | ||
+ | |||
+ | * Carte SD ou ''/ | ||
+ | |||
+ | Ne doit servir que pour stocker des données. Il n'est pas possible d'y stocker des exécutables. Le dossier est monté en '' | ||
+ | |||
+ | * Dossier home de l' | ||
+ | |||
+ | Ne doit servir que pour stocker des données spécifiques à chaque application. Il n'est pas possible d'y stocker des exécutables. | ||
+ | |||
+ | Pour exécuter des binaires externes, il faut les [[lang: | ||
+ | |||
+ | [[https:// | ||
lang/android/permission.1664178266.txt.gz · Dernière modification : de root