Android — Не удается просмотреть изображение, сохраненное в новом каталоге, когда я пытаюсь загрузить его снова

#java #android #photo-upload

#Ява #Android #загрузка фотографий

Вопрос:

Я загружаю изображение из галереи и сохраняю его в новый каталог после обрезки (используя библиотеку обрезки изображений Android).

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

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

Активность редактирования

 save_button.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View view) {  saveImage();  }  });  }  public void saveImage(){  try {  InputStream inputStream = getContentResolver().openInputStream(resultUri);  bitmap = BitmapFactory.decodeStream(inputStream);;  } catch (FileNotFoundException e) {  e.printStackTrace();  }   File file = Environment.getExternalStorageDirectory();  File dir = new File(file.getAbsolutePath() "/Pictures/");  if(!dir.exists()){  dir.mkdirs();  }  File f = new File(dir,System.currentTimeMillis() ".jpg");  try {  outputStream = new FileOutputStream(f);  } catch (FileNotFoundException e) {  e.printStackTrace();  }  bitmap.compress(Bitmap.CompressFormat.JPEG,90,outputStream);  Toast.makeText(getApplicationContext(),f.toString(),Toast.LENGTH_SHORT).show();  try {  outputStream.flush();  } catch (IOException e) {  e.printStackTrace();  }  try {  outputStream.close();  } catch (IOException e) {  e.printStackTrace();  }   }  

Основная деятельность

   private void cam_permission() {  if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){  ActivityCompat.requestPermissions(this,new String[] {Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);  } else{  dispatchTakePictureIntent();  }  }    private void storage_permission(){  if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){  ActivityCompat.requestPermissions(this,new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);  } else{  Intent gallery = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  startActivityForResult(gallery, GALLERY_REQUEST_CODE);  }  }    @Override  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {   if (requestCode == CAMERA_PERMISSION_CODE) {  if (grantResults.length gt; 0   amp;amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {   } else {  Toast.makeText(this, "Camera Permission is required", Toast.LENGTH_SHORT).show();  }  }  else if (requestCode == STORAGE_PERMISSION_CODE) {  if (grantResults.length gt; 0  amp;amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {  }  else {  Toast.makeText(MainActivity.this, "Storage Permission is required", Toast.LENGTH_SHORT).show();  }  }  super.onRequestPermissionsResult(requestCode, permissions, grantResults);  }   @Override  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {   if (requestCode == CAMERA_REQUEST_CODE) {  if (resultCode == Activity.RESULT_OK) {  File file = new File(currentPhotoPath);  Uri contentUri = Uri.fromFile(file);    Intent intent = new Intent(Intent.ACTION_VIEW);  intent .setClass(MainActivity.this, EditActivity.class);  intent .putExtra("imageUri", contentUri.toString());  startActivity(intent);  }  }  if (requestCode == GALLERY_REQUEST_CODE) {  if (resultCode == Activity.RESULT_OK) {  Uri contentUri = data.getData();  String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());   Intent intent = new Intent(Intent.ACTION_VIEW);  intent .setClass(MainActivity.this, EditActivity.class);  intent .putExtra("imageUri", contentUri.toString());  startActivity(intent);  }  }  super.onActivityResult(requestCode, resultCode, data);  }    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 = getExternalFilesDir(Environment.DIRECTORY_PICTURES);  File image = File.createTempFile(  imageFileName, /* prefix */  ".jpg", /* suffix */  storageDir /* directory */  );   // Save a file: path for use with ACTION_VIEW intents  currentPhotoPath = 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(getPackageManager()) != null) {  // Create the File where the photo should go  File photoFile = null;  try {  photoFile = createImageFile();  } catch (IOException ex) {  // Error occurred while creating the File   }  // Continue only if the File was successfully created  if (photoFile != null) {  Uri photoURI = FileProvider.getUriForFile(this,  "com.example.android.fileprovider",  photoFile);  takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);  startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);  }  }  }  

AndroidManifest.xml

 lt;uses-permission android:name="android.permission.CAMERA" /gt;  lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /gt;  lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /gt;  

Комментарии:

1. Если вы используете устройство Android 11 или выше, вам придется использовать новый метод доступа к файлу.

2. if(!dir.exists()){ dir.mkdirs(); } Так и должно быть if(!dir.exists()){ if (!dir.mkdirs()) return; } . Также отобразите тост, чтобы проинформировать пользователя.

3. I try upload the same image in the app it is not showing up Я не знаю, что ты имеешь в виду, когда говоришь о появлении. Но если ваше приложение может где-то создать файл изображения, оно всегда может использовать и прочитать этот файл для загрузки или что с ним делать. Так почему же вы не можете пойти по тому же пути? Расскажите это без необходимости читать весь этот код.

4. У меня есть кнопка для выбора изображения из галереи. После редактирования изображения оно сохраняется как новое изображение в данном каталоге. Его можно найти в проводнике, но я хочу сохранить, выберите изображение из галереи при нажатии кнопки, но оно не отображается.