У меня проблемы с установкой APK, сохраненного во внутреннем кэше Android. Нет проблем с сохранением файла во внешнем хранилище или во внешнем кэше с помощью context.getExternalCacheDir () .
Но если я попытаюсь использовать context.getCacheDir () , журнал возвращает
/data/data/com.my.package/cache/update.apk: open не удалось: EACCES (в доступе отказано)
File file = context.getCacheDir (); Файл outputFile = новый файл (файл, «update.apk»); если (outputFile.exists ()) {outputFile.delete (); } FileOutputStream fos = новый FileOutputStream (outputFile); InputStream = c.getInputStream (); байт [] буфер = новый байт [1024]; int len1 = 0; в то время как ((len1 = is.read (буфер))! = -1) {fos.write (буфер, 0, len1); } fos.close (); закрыто(); Намерение намерение = новое намерение (Intent.ACTION_VIEW); //СОХРАНИТЬ В КЭШЕ intent.setDataAndType (Uri.fromFile (outputFile), "application/vnd.android.package-archive"); intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); //без этого флага android вернул ошибку намерения! context.startActivity (intent);
Похоже, внутренний кеш не позволяет правильно читать APK.
Дело в том, что если файл сохраняется во внешнем хранилище или внешнем кэше, APK будет доступен пользователю, а я этого не хочу.
Что делать, чтобы сохранить файл во внутреннем кэше?
Спасибо
Похоже, внутренний кеш не позволяет правильно прочитать APK.
Это потому, что приложение-установщик не имеет прав на чтение вашего файла.
Дело в том, что если файл сохраняется во внешнем хранилище или внешнем кэше, APK будет доступен пользователю, а я этого не хочу.
Тогда не устанавливайте его на устройство пользователя. Любой пользователь может скопировать любой APK со своего устройства в любое время после установки, поэтому единственный способ предотвратить доступ пользователя к APK — это вообще не иметь его на устройстве.
Что делать, чтобы сохранить файл во внутреннем кэше?
Наверное, ничего. Если вы переключитесь на openFileOutput ()
, вы увидите, достаточно ли MODE_WORLD_READABLE
для продолжения установки. Опять же, это не помешает пользователю получить доступ к файлу APK.
Попробуйте посмотреть chmod команда для получения разрешений на чтение запись во внутренней папке … Что касается Linux, это выглядит так …
chmod 777/data/data/*** или chmod 644/ data/data/***
1
Как очистить кеш отдельного приложения на Android 8.0 Oreo и выше
Цель
- Очистить кеш кеша отдельного приложения на Android 8.0 Oreo
Среда
- Android 8.0 Oreo
- Android 9. 0 Пирог
Процедура
- Перейдите в Настройки
- Коснитесь Хранилище
- Перейдите к Другие приложения
ПРИМЕЧАНИЕ : вам может потребоваться нажать Внутреннее хранилище , прежде чем этот параметр станет доступен! - Нажмите на приложение, для которого вы хотите очистить кеш
- Нажмите Очистить кеш
Дополнительные примечания
Android 8.1 Oreo не имеет возможности очистить систему. кеш или кеш всех приложений.
Статья создана из
- 1346945