Обычно у меня есть действие, которое отображает все изображения в папке «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();
}
}
}
}