Я реализую приложение для Android, используя камеру для фотографирования, а затем регистрирую его в External_storage\Android\data\com.abc.projectname.bf . Но после открытия камеры, даже если я не делаю снимок, файл изображения регистрируется в каталоге. Как я могу это решить, вот код:
public void onCapturePhoto(String fileName){
//Intent to take photos
File storageDirectory = requireActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
try {
Log.d("#picName",fileName);
File imageFile = File.createTempFile(fileName,".jpg",storageDirectory);
currentPhotoPath = imageFile.getAbsolutePath();
Uri imageUri= FileProvider.getUriForFile(requireActivity(),"com.ticanalyse.mheath.bf",imageFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(intent,1);
Log.d("#image_length is ",String.valueOf(imageFile.length()));
} catch (IOException e) {
e.printStackTrace();
}
}
//
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
// imageView.setImageBitmap(imageBitmap);
// File f = new File(currentPhotoPath);
//// Uri contentUri = Uri.fromFile(f);
// Bitmap bitmap = BitmapFactory.decodeFile(currentPhotoPath);
// //Convert bitmap to byteArray
// ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
// byte[] byteArray = byteArrayOutputStream .toByteArray();
// //Then convert to base64
// encodedImage= Base64.encodeToString(byteArray, Base64.DEFAULT);
// Log.d("#base64",encodedImage);
// setPic();
}
}
@SujalKumar я нашел альтернативу проблеме. но теперь, если я открою камеру, а затем выйду из нее, файл 0Mo будет зарегистрирован в каталоге, даже если я не сделал ни одной фотографии. Какая проблема может вызвать это?
Нельзя быть уверенным, не видя кода.
@SujalKumar, вот код
Спасибо. Не могли бы вы тоже поделиться onActivityResult()? Я думаю, что удаление файла, если не было предпринято никаких действий, может решить вашу проблему, и это должно быть реализовано в самом этом методе.
Прежде всего, получите объект imageFile из этой строки:
File imageFile = File.createTempFile(fileName,".jpg",storageDirectory);
... объявлен как глобальный в действии, подобном этому...
public class XYZActivity extends AppCompatActivity {
private File imageFile;
//onCreate(), onCapturePhoto(), etc methods
}
Затем в onCapturePhoto():
imageFile = File.createTempFile(fileName,".jpg",storageDirectory);
Теперь в onActivityResult(), если вы убедитесь, что изображение не было снято/нажато, вы можете попробовать удалить временный файл следующим образом:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
//Your stuff...
}
else {
//No photo was taken or clicked...
//Thus, deleting the temporary file...
if (file.exists()) {
if (file.delete()) {
Log.i("Process", "Deletion DONE!");
}
}
}
}
Если я истолковал какую-либо часть проблемы нежелательным образом, сообщите мне об этом.
Не могли бы вы поделиться соответствующим кодом для лучшей справки?