Обмен знаниями об Android…
В этой статье показано, как реализовать небольшой проект для Android, использующий память устройства. Мы используем эти функции для разных приложений с разными целями. В то время эта статья поможет вам так много. Эти функции также работают для последней версии Android (Android 11 (уровень API 30)). В ваших приложениях иногда нужно загрузить файлы в хранилище пользователя, например изображения, PDF и т.д. После этого их нужно прочитать. При таком подходе вы можете загрузить их в скрытую папку, но в некоторых версиях скрытые файлы отображаются в категории загрузки. В некоторых случаях это будет проблемой. Тем не менее, я надеюсь, что это руководство поможет вам решить подобные проблемы.
Содержание учебника
- Загрузите файл в скрытую папку.
- Показать загруженные файлы, прочитав хранилище.
Скачать изображение в скрытую папку
Во-первых, вы хотите создать приложение для 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, которые вы должны реализовать в своих приложениях. Пожалуйста, не стесняйтесь задавать любые вопросы, с которыми вы столкнетесь, в разделе ответов ниже.
Удачного кодирования !!!!
Нашли этот пост полезным? Пожалуйста, нажмите кнопку 👏 ниже! :)