Android – запись изменения разрешения на чтение и запись
Android – запись изменения разрешения на чтение и запись

фон

потому чтоAndroidТребования рынка приложений — это минимальные требования.API 30Вот и все,Я собираюсь пойти прямо изAPI 28подняться доAPI 33Понятно,Были некоторые проблемы с чтением и записью места на диске.,Сделайте здесь несколько заметок. Подвести итог~

Связанные разрешения:

  1. permission.READ_EXTERNAL_STORAGE
  2. permission.WRITE_EXTERNAL_STORAGE
  3. permission.MANAGE_EXTERNAL_STORAGE
  4. permission.READ_MEDIA_VIDEO
  5. permission.READ_MEDIA_IMAGES
  6. permission.READ_MEDIA_AUDIO

Связанные точки знаний

Что касается более низких версий, я не буду объяснять это здесь.

  1. Android 10 (уровень API 29))начинать,android.permission.WRITE_EXTERNAL_STORAGE 权限的行为发生Понятно变化,Это разрешение по умолчанию считается недействительным.,может пройтиpermission.MANAGE_EXTERNAL_STORAGE Получить разрешения для всех файлов,Но на это разрешение могут претендовать только системные приложения и приложения с особыми требованиями.,Environment.isExternalStorageManager() 判断自己是否получать Понятно全部的权限。Environment.getExternalStorageDirectory() Без разрешения он недоступен.
  2. android:requestLegacyExternalStorage="true" используется в Android 10 (уровень API 29))及Вот и все版本середина启用传统外部存储权限模式的应用程序清单属性,Android 11(API уровень 30) больше не действует.
  3. Android 11(API уровень 30) После этого разрешения по умолчанию можно получить через context.getExternalFilesDir. Получить внешнее хранилище,/хранилище/эмулированный/0/Android/данные/имя пакета/файл ,Никаких специальных разрешений не требуется,Поскольку этот каталог является частным для приложения,После удаления приложения оно также будет удалено.
  4. Android 11(API уровень 30) , разрешения на чтение медиафайлов более ограничены. Даже если вы заявите READ_EXTERNAL_STORAGE Разрешения ваше приложение может получить доступ только к своим собственным медиафайлам и общедоступным файлам, хранящимся в медиатеке. Если вам нужно получить доступ к медиафайлам из других приложений, вам нужно использовать Storage Access Framework или MediaStore API посетить.
  5. Чтобы прочитать медиафайлы (например, изображения、Аудио、Видео и т. д.)нуждатьсяpermission.READ_EXTERNAL_STORAGE, существоватьAndroid 33后被细分出Понятноpermission.READ_MEDIA_VIDEO,permission.READ_MEDIA_IMAGES,permission.READ_MEDIA_AUDIO

Подвести итог

  1. Android 10 (уровень API 29))после:android.permission.WRITE_EXTERNAL_STORAGE Недействительно по умолчанию,Но даиспользоватьandroid:requestLegacyExternalStorage="true" над.
  2. Android 11(API уровень 30) Позже:android:requestLegacyExternalStorage="true" начинать无效Понятно,但是может пройтиpermission.MANAGE_EXTERNAL_STORAGE Получите разрешения на чтение и запись для всех файлов илииспользовать context.getExternalFilesDir() Метод получения каталога приложения во внешнем хранилище./хранилище/эмулированный/0/Android/данные/имя пакета/файлчас,Никаких специальных разрешений не требуется。нуждаться注意:существовать Android 12 середина,MANAGE_EXTERNAL_STORAGE Разрешения изменены для более высокой защиты.уровень,Только определенные системные приложения могут получить это разрешение.,Это разрешение высокого риска.
  3. Android 13(API уровень 33) Позже:READ_EXTERNAL_STORAGE Разрешения подразделяются,нуждатьсяполучать对应媒体权限permission.READ_MEDIA_VIDEO,permission.READ_MEDIA_IMAGES,permission.READ_MEDIA_AUDIO

Возникшие проблемы

1. Ограничения доступа к стороннему средству выбора альбомов.

Язык кода:text
копировать
fun checkHasPermission(activity: FragmentActivity,isRequest:Boolean): Boolean {
        val hasPermission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
			//**Android 13(API уровень 33), обнаружить и подать заявку на соответствующее разрешение**
            activity.hasPermission(
                Manifest.permission.READ_MEDIA_VIDEO,
                Manifest.permission.READ_MEDIA_IMAGES,
                Manifest.permission.READ_MEDIA_AUDIO,
                Manifest.permission.READ_EXTERNAL_STORAGE,
                isRequest = isRequest
            )
        } else {
            activity.hasPermission(
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                isRequest = isRequest
            )
        }
        return hasPermission
    } 

2. Внешнее хранилище файлов

Метод 1: Environment.getExternalStorageDirectory() использовать context.getExternalFilesDir() заменять;

Язык кода:txt
копировать
		- Преимущества: Не требуется получение разрешения.
		- Недостатки: Когда приложение удаляется, оно будет удалено вместе, поэтому важные медиафайлы требуют использования нового медиа-метода для их сохранения.

метод2:получатьandroid.permission.WRITE_EXTERNAL_STORAGE

Язык кода:txt
копировать
		- Преимущества: этот метод может наследовать старые данные, и данные не будут удалены при удалении приложения.- Недостатки: Разрешения слишком чувствительны.,Пользователю необходимо перейти к соответствующему интерфейсу настроек, чтобы открыть его вручную.
Язык кода:html
копировать
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
Язык кода:text
копировать
if (!Environment.isExternalStorageManager()) {  
   //Настраиваем соответствующие настройки для обработки
    try {
        val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
        intent.addCategory("android.intent.category.DEFAULT")
        intent.data = Uri.parse(String.format("package:%s", context.packageName))
        context.startActivity(intent)
    } catch (e: Exception) {
        val intent = Intent()
        intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
        context.startActivity(intent)
    }
}
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose