Хранение фото в кеше оффлайн - PullRequest
0 голосов
/ 06 ноября 2019

Можно ли хранить фотографию в Android для локального кэширования на устройстве, когда вы в автономном режиме, и всякий раз, когда вы выходите в Интернет, он будет загружать любые фотографии из очереди в кэш?

private File createImageFile() throws IOException {
// Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );
        mCurrentPhotoPath = image.getAbsolutePath();
        return image;
    }

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
            // Create the File where the photo should go
            File photoFile = null;
            try {
                photoFile = createImageFile();
                Log.e( TAG,"created image");
            } catch (IOException ex) {

                Log.e( TAG,"takePictureIntent: IOException: "+ex.getMessage(),ex);

                // Error occurred while creating the File...
            }
            // Continue only if the File was successfully created
            if (photoFile != null) {
                Log.e( TAG,"Not null ");
                photoURI = FileProvider.getUriForFile(getActivity(),
                        "com.example.android.fileprovider",
                        photoFile);
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                Log.e( photoURI.toString(),"url");
                startActivityForResult(takePictureIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
            }
        }
    }

1 Ответ

0 голосов
/ 08 ноября 2019

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

   String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";

    AssetManager mgr = getAssets();

    try {

        String list[] = mgr.list(path);
        Log.e("FILES", String.valueOf(list.length));

        if (list != null) {
            for (int i=0; i < list.length; ++i)
                {

                   // Here you could upload the file at path +"/"+ list[i]

                   // If successful, then delete the file
                   File file = new File(path +"/"+ list[i]);
                   file.delete();
                   // Sometimes, deletes don't work the first time, so try it different ways
                   if(file.exists()){
                      file.getCanonicalFile().delete();
                      // If file still exists, try a third way!
                      if(file.exists()){
                          getApplicationContext().deleteFile(file.getName());
                   }
                }

        }

    } catch (IOException e) {
        Log.v("List error:", "can't list" + path);
    }

Не забывайте, что вам нужно будет включить разрешение на запись во внешнее хранилище. в вашем файле AndroidManifest.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...