Как получить доступ к внешнему и внутреннему хранилищу? Загрузки требуют доступа к памяти устройства в Xiaomi что делать Что делать, если в Xiaomi — Загрузки требуют доступа к памяти устройства.
Последнее обновление: 21.03.2017
В прошлой теме мы рассмотрели сохранение и чтение файлов из каталога приложения. По умолчанию такие файлы доступны только самому приложения. Однако мы можем помещать и работать с файлами из внешнего хранилища. Это также позволит другим программам открывать данные файлы и при необходимости изменять.
Весь механизм работы с файлами будет таким же, как и при работе с хранилищем приложения. Ключевым отличием здесь будет получение и использование пути к внешнему хранилищу через метод Environment.getExternalStorageDirectory()
Итак, пусть в файле activity_main.xml будет такая же разметка интерфейса:
А код класса MainActivity будет выглядеть следующим образом:
Package com.example.eugene.filesapp; import android.Manifest; import android.content.pm.PackageManager; import android.os.Environment; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity { private final static String FILE_NAME = "content.txt"; private static final int REQUEST_PERMISSION_WRITE = 1001; private boolean permissionGranted; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } private File getExternalPath() { return(new File(Environment.getExternalStorageDirectory(), FILE_NAME)); } // сохранение файла public void saveText(View view){ if(!permissionGranted){ checkPermissions(); return; } FileOutputStream fos = null; try { EditText textBox = (EditText) findViewById(R.id.save_text); String text = textBox.getText().toString(); fos = new FileOutputStream(getExternalPath()); fos.write(text.getBytes()); Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show(); } catch(IOException ex) { Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } finally{ try{ if(fos!=null) fos.close(); } catch(IOException ex){ Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } } } // открытие файла public void openText(View view){ if(!permissionGranted){ checkPermissions(); return; } FileInputStream fin = null; TextView textView = (TextView) findViewById(R.id.open_text); File file = getExternalPath(); // если файл не существует, выход из метода if(!file.exists()) return; try { fin = new FileInputStream(file); byte bytes = new byte; fin.read(bytes); String text = new String (bytes); textView.setText(text); } catch(IOException ex) { Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } finally{ try{ if(fin!=null) fin.close(); } catch(IOException ex){ Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } } } // проверяем, доступно ли внешнее хранилище для чтения и записи public boolean isExternalStorageWriteable(){ String state = Environment.getExternalStorageState(); return Environment.MEDIA_MOUNTED.equals(state); } // проверяем, доступно ли внешнее хранилище хотя бы только для чтения public boolean isExternalStorageReadable(){ String state = Environment.getExternalStorageState(); return (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)); } private boolean checkPermissions(){ if(!isExternalStorageReadable() || !isExternalStorageWriteable()){ Toast.makeText(this, "Внешнее хранилище не доступно", Toast.LENGTH_LONG).show(); return false; } int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if(permissionCheck!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(this, new String{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_WRITE); return false; } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions, @NonNull int grantResults){ switch (requestCode){ case REQUEST_PERMISSION_WRITE: if(grantResults.length > 0 && grantResults == PackageManager.PERMISSION_GRANTED){ permissionGranted = true; Toast.makeText(this, "Разрешения получены", Toast.LENGTH_LONG).show(); } else{ Toast.makeText(this, "Необходимо дать разрешения", Toast.LENGTH_LONG).show(); } break; } } }
С помощью выражения Environment.getExternalStorageDirectory() получаем доступ к папке приложения во внешнем хранилище и устанавливаем объект файла:
Private File getExternalPath() { return(new File(Environment.getExternalStorageDirectory(), FILE_NAME)); }
Поскольку для чтения/записи во внешнее хранилище необходимы разрешения, то перед операциями сохранения и записи файла необходимо проверить наличие разрешений. Для этого определен метод checkPermissions() . При установке разрешений срабатывает метод onRequestPermissionsResult() , в котором в случае удачной установки разрешений для переменной permissionGranted задается значение true .
Чтобы использовать внешнее хранилище, также надо установить разрешения в файле манифеста AndroidManifest.xml:
При попытке скачать файл на телефон «Xiaomi» пользователь устройства может получить сообщение «Загрузки требуют доступа к памяти устройства». Подобная дисфункция обычно вызвана особенностями настроек приложений «Загрузки» и «Браузер», из-за которых доступ данных приложений к памяти телефона оказывается заблокирован. Разберёмся со спецификой данной проблемы и вариантами её решения.
Суть возникновения проблемы требования доступа
Как известно, операционная система «Андроид» позволяет пользователю регулировать специфику доступа того или иного мобильного приложения к системным компонентам вашего телефона. Это вызвано как политикой безопасности (злокачественные приложения не могут автоматически получать доступ к системным компонентам), так и особенностями работы с аккумулятором, позволяя более бережно расходовать его потенциал.
Получение сообщения «Загрузки требуют доступа к памяти устройства» обычно означает, что настройки вашего мобильного браузера заблокировали необходимый ему доступ к памяти гаджета.
В некоторых случаях схожее уведомление также может касаться приложения «Загрузки» (Downloads), которому также запрещён указанный доступ.
Давайте разберёмся, как решить проблему «Загрузки требуют доступа» на Xiaomi.
Что делать, если в Xiaomi — Загрузки требуют доступа к памяти устройства
Чтобы исправить проблему с загрузкой на Xiaomi нет необходимости получать рут-права, перешивать устройство или делать другие аналогичные им операции. Способы решения проблемы довольно просты.
- Первым делом проверьте общую работоспособность вашего мобильного браузера.
- Закройте его, затем перейдите в настройки девайса, и выберите там «Все приложения».
- В перечне приложений найдите ваш браузер, тапните на нём, и перейдя в его настройки нажмите на «Очистить данные», а также на «Очистить кэш».
- Затем закройте настройки гаджета, запустите браузер, и попробуйте вновь скачать нужные вам файлы.
Если ошибка продолжает повторяться, тогда необходимо изменить настройки доступа вашего браузера и приложения «Загрузки». Перейдите в настройки вашего Xiaomi, там выберите «Все приложения» — («Сторонние»), затем «Браузер», потом «Разрешения приложений», и активируйте там ползунок «Память».
Также рекомендуется провести аналогичное действие в отношении приложения «Загрузка» (или по-английски «Downloads»). В настройках устройства необходимо найти указанное приложение, тапнуть по нему, и войдя в его настройки передвинуть ползунок «Память», отвечающий за доступ приложения к последней. Проблема будет решена.
Заключение
В абсолютном большинстве случаев появление сообщения «Загрузки требуют доступа к памяти устройства» означает, что настройки работы браузера не дают ему доступа к памяти вашего гаджета. Простым и эффективным решением проблемы является переход в настройки устройства и предоставление браузеру (или приложению «Загрузки») необходимых разрешений, после чего данная проблема будет эффективно решена.
У вас возник вопрос, почему загрузки на Xiaomi требуют доступа к памяти устройства, и что делать в этом случае? Для самостоятельного решения проблемы представляем пошаговое руководство с картинками.
Ограничение к доступу памяти телефона для большинства приложений заметило много пользователей смартфонов Xiaomi, а также владельцы устройств под управлением Android. Ведь перед первым запуском любого скачанного приложения из Play Market, система производит запрос доступа к памяти устройства, местоположению, вызовам и прочему. Раньше разрешение на распоряжение данными получало каждое приложение автоматически, а пользователь мог знать о требованиях программ только из их описания в Play Market. Теперь владелец устройства может внести ограничения самостоятельно.
Важно: многие программы запрашивают разрешение на отслеживание местоположения. Это не только ставит под сомнения условия конфиденциальности, но также негативно влияет на энергопотребление. Ведь смартфон будет вынужден постоянно обращаться к GPS или повышать нагрузку на сеть, чтобы вычислить координаты.
Сама ошибка возникает из-за того, что приложению не было выдано разрешение на доступ к памяти. Соответственно, без этого программа «Загрузки» работать не может, о чем и уведомляет владельцев смартфонов Xiaomi. Ошибка также может быть вызвана сторонними браузерами, в которых стоят запреты по некоторым пунктам.
Как исправить
Решение является очень простым и не требует специальных знаний. Виновниками являются используемые браузеры, а также приложение «Загрузки», в некоторых смартфонах данной марки оно называется «Downloads» . Необходимо проверить настройки обоих приложений и выставить их правильно.
Проверка браузера
Проверьте работоспособность браузера. Если он открывается безо всяких предупреждений, значит нужно идти другими шагами:
- Войти в настройки устройства. Чтобы не искать соответствующего значка в меню, нужно сдвинуть верхнюю шторку вниз и нажать на иконку шестеренки.
- Зайти в пункт «Все приложения».
- В списке найти тот браузер, с которого планируется осуществить загрузку. Для удобства можно воспользоваться поиском по названию, и кликнуть на него.
- После открытия понадобится войти в раздел «Разрешения приложений».
- В них, чтобы началась загрузка, нужно разрешить доступ к памяти. Для этого сдвиньте ползунок на графе «Память».
- Далее потребуется нажатием кнопки «Назад» на корпусе устройства, вернуться в предыдущий пункт и открыть строку «Память».
- В ней кликнуть на «Стереть данные» и «Очистить кэш».
- Опять вернуться на шаг назад и перейти в пункт «Трафик».
- В нем сдвинуть ползунок вправо во всех пунктах.
Для заметки: «Фоновый трафик» можно запретить (не сдвигать ползунок вправо). При этом приложение не сможет подключиться к интернету тогда, когда не будет использоваться. Из-за этого оно перестанет присылать уведомления.
Однако существуют такие программы, которые могут тратить до 300 Мб трафика за 2 недели в период простоя (этим особенно грешат игры). И тем самым существенно снижать объемы, предоставляемые операторами сотовой связи. Поэтому нужно проверить расход и запретить фоновый доступ в интернет подобным программам (расход в фоне отображается напротив пункта «Фоновый трафик»).
Проверка загрузок
Алгоритм действий идентичен. Нужно повторить все вышеописанное, но уже для приложения «Загрузки» (или «Downloads» для более ранних версий смартфонов). Однако здесь использование фонового трафика нужно разрешить. Так как во время простоя мегабайты практически не используются. Запрет может способствовать вызову ошибки, поэтому не рекомендуется отключать фоновый расход трафика в данной ситуации.
Описанные действия помогут полностью исключить появление ошибок. Выполнив все в точности, вы предотвратите появление ошибки «Загрузки требуют доступа к памяти устройства» на Xiaomi всех моделей и сможете начать загружать любые файлы.
When you install an app from Google Play on a device running Android 6.0 and up or on a Chromebook, you control which capabilities or information that app can access-known as permissions. For example, an app might want permission to see your device contacts or location. You can control which permissions an app can access after the app installs on your device.
Tip: To find which version of Android your device uses, open your device"s Settings app. Then, tap System About phone or About tablet .
When you install an app
When you download apps from the Play Store, some apps will ask for permission to use information before you install. When you download apps that are built for Android 6.0 and up, you can allow or deny permissions once you start using them.
When apps are installed on your device
When an app installed on your device updates, there may be changes to the permissions for that app.
If you have automatic updates turned onFor apps built for Android 6.0 and up: You won"t need to review or accept permission changes for the app to update. The first time you use a feature that uses a new permission, you can allow or deny the use of that data or capability.
For other apps: You won"t need to review or accept permissions you"ve already accepted for an app again. If the app needs access to new permissions groups or permissions in the "Other" group, you"ll be asked to accept the update even if you"ve set up automatic updates.
If you prefer to review each update manually, you can turn off auto-updates with the instructions below.
Turn off auto-updatesIf you want to review each update before installing it, you can turn off auto-updates.
Turn off auto-updates for specific apps
Turn off auto-updates for all apps
Turn permissions on or off
You can change the permissions that apps can access in the main Settings app on your device at any time. Keep in mind turning off permissions may cause apps on your device to lose functionality.
Note: If you"re using a work, school, or government Google Account, your administrator may use the Device Policy app to control certain permissions.
See all permissions for each appFor apps installed on your device
For instant apps
See all apps installed on your device that can access particular permissions Check app permissions if an app isn"t workingIf a feature within an app isn"t working as you would expect, try the steps below.