#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. У меня есть кнопка для выбора изображения из галереи. После редактирования изображения оно сохраняется как новое изображение в данном каталоге. Его можно найти в проводнике, но я хочу сохранить, выберите изображение из галереи при нажатии кнопки, но оно не отображается.