Как мне переместить изображения, которые я выбрал из неявного намерения, в определенную папку c? - PullRequest
1 голос
/ 10 июля 2020

Обычно у меня есть действие, которое отображает все изображения в папке «A». У меня есть опция под названием «Добавить изображения», которая должна позволить пользователю выбирать изображения из неявного намерения, и после нажатия кнопки «Готово» я хочу, чтобы изображения из источника в папку «A». Все работает нормально, за исключением того, что изображения не движутся. Пожалуйста помоги! Мой код:

public class Photos extends AppCompatActivity {
    Uri imageUri;
    final int REQUEST_EXTERNAL_STORAGE = 100;
    RecyclerView recyclerView;
    PhotosAdapter photosAdapter;
    File photoPath;
    ArrayList<ImageDetails> img = new ArrayList<>(); //ImageDetails- Class of Getter and Setter
    ImageDetails imageDetails;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Intent intent = getIntent();
        String albumName = Objects.requireNonNull(intent.getExtras()).getString("AlbumName");
        photoPath = new File(Environment.getExternalStorageDirectory() + "/Vault/" + albumName);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photos);
        listingPhotos();
    }

    private void listingPhotos() {
        photosAdapter = new PhotosAdapter(this, getData());
        recyclerView = findViewById(R.id.photo_id);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
        recyclerView.setAdapter(photosAdapter);
    }

    private ArrayList<ImageDetails> getData() {
        if (photoPath.exists()) {
            File[] files = photoPath.listFiles();
            for (File file : files) {
                imageDetails = new ImageDetails();
                imageDetails.setName(file.getName());
                imageDetails.setUri(Uri.fromFile(file));
                img.add(imageDetails);
            }
        }
        return img;
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_photos, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.AddNewPhotos) {
            launchGalleryIntent();
        }
        return super.onOptionsItemSelected(item);
    }

    public void launchGalleryIntent() {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setType("image/*");
        startActivityForResult(intent, REQUEST_EXTERNAL_STORAGE);
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQUEST_EXTERNAL_STORAGE) {
            if(resultCode == Activity.RESULT_OK) {
                if(data.getClipData() != null) {
                    int count = data.getClipData().getItemCount();
                    for(int i = 0; i < count; i++){
                        imageUri = data.getClipData().getItemAt(i).getUri();
                        try {
                            saveFile(imageUri);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
    void saveFile(@NonNull Uri sourceUri) throws IOException {
        String sourceFilename= sourceUri.getPath();
        String destinationFilename = photoPath.getAbsolutePath();
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;

        try {
            bis = new BufferedInputStream(new FileInputStream(sourceFilename));
            bos = new BufferedOutputStream(new FileOutputStream(destinationFilename, false));
            byte[] buf = new byte[1024];
            bis.read(buf);
            do {
                bos.write(buf);
            } while(bis.read(buf) != -1);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bis != null) bis.close();
                if (bos != null) bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...