Обмен знаниями об Android…

В этой статье показано, как реализовать небольшой проект для Android, использующий память устройства. Мы используем эти функции для разных приложений с разными целями. В то время эта статья поможет вам так много. Эти функции также работают для последней версии Android (Android 11 (уровень API 30)). В ваших приложениях иногда нужно загрузить файлы в хранилище пользователя, например изображения, PDF и т.д. После этого их нужно прочитать. При таком подходе вы можете загрузить их в скрытую папку, но в некоторых версиях скрытые файлы отображаются в категории загрузки. В некоторых случаях это будет проблемой. Тем не менее, я надеюсь, что это руководство поможет вам решить подобные проблемы.

Содержание учебника

  1. Загрузите файл в скрытую папку.
  2. Показать загруженные файлы, прочитав хранилище.

Скачать изображение в скрытую папку

Во-первых, вы хотите создать приложение для Android (Java). Затем вы должны завершить основной макет, добавив две кнопки для загрузки и показа и ImageView.

Затем вам нужно запросить разрешение на использование памяти устройства и подключение к Интернету. Добавьте следующие четыре разрешения в AndroidManifest.xml.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

В начале вы должны запросить разрешения на хранение следующим образом.

if (SDK_INT >= Build.VERSION_CODES.R) {
    Log.d("myz", ""+SDK_INT);
    if (!Environment.isExternalStorageManager()) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.MANAGE_EXTERNAL_STORAGE}, 1);//permission request code is just an int
    }
}else {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
    }
}

Теперь вы готовы реализовать код загрузки изображения. Здесь я просто показываю для загрузки изображения. Но вы можете использовать любой тип файла для своих целей.

Когда вы нажмете кнопку загрузить, будет выполнен следующий код. Во-первых, нам нужно проверить, существует ли файл.

if (fileExist("sample_image2")) {
    Toast.makeText(getApplicationContext(),"This Image is Already Available in your storage", Toast.LENGTH_SHORT).show();
} else {
    downloadManager();
}public boolean fileExist(String fname){
    File file = new File(getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
            + "/.myfolder", fname+".jpg");
    return file.exists();
}

Если файл не существует, следует загрузить файл. Здесь я вызываю метод downloadManager(). Вы можете использовать точку перед именем файла при названии папки, тогда эта папка не будет отображаться в хранилище. Но в некоторых версиях файл отображается в категории загруженных файлов.

public void downloadManager() {
    File path = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
    String folder_main = ".myfolder";
    File f = new File(path, folder_main);
    if (!f.exists()) {
        f.mkdirs();
        Log.e("myz", "Directory make");
    }else{
        Log.e("myz", "Directory already have");
    }
    File file = new File(f, "sample_image2.jpg");
    try {
        Log.e("myz", "Directory make");
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://www.tompetty.com/sites/g/files/g2000007521/f/Sample-image10-highres.jpg"))
                .setTitle("sample_image")// Title of the Download Notification
                .setDescription("Downloading")// Description of the Download Notification
                .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)// Visibility of the download Notification
                .setDestinationUri(Uri.fromFile(file))
                .setAllowedOverMetered(true)// Set if download is allowed on Mobile network
                .setAllowedOverRoaming(true);//
        DownloadManager downloadManager = (DownloadManager) getApplicationContext().getSystemService(DOWNLOAD_SERVICE);
        long downloadID = Objects.requireNonNull(downloadManager).enqueue(request);
    } catch (IllegalArgumentException e) {
        Log.e("myz", "downnload error "+e);
    }
}

Затем вы увидите, что файл успешно загружается и сохраняется.

После того, как вы загрузили файл, он находится в определенной папке.

Показать загруженные файлы, прочитав хранилище.

В нашей второй части мы должны показать загруженный файл. На самом деле здесь метод рендеринга файла зависит от типа файла. Здесь я скачал изображение .jpg. Поэтому я использовал библиотеку Picasso для загрузки изображения в режим просмотра изображений.

public void show(View view){
    File file = new File(getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)+ "/.myfolder", "sample_image2.jpg");
    if(file.exists())
    {
        ImageView imageView = findViewById(R.id.imageView);
        Picasso.get().load(file.getAbsolutePath()).into(imageView);
    }
}

Эта история дает вам знания о вариантах использования хранилища Android/Java, которые вы должны реализовать в своих приложениях. Пожалуйста, не стесняйтесь задавать любые вопросы, с которыми вы столкнетесь, в разделе ответов ниже.
Удачного кодирования !!!!
Нашли этот пост полезным? Пожалуйста, нажмите кнопку 👏 ниже! :)