В галерее всегда создаются и сохраняются «пустые изображения», хотя я решил не брать изображение и выйти из экрана камеры, нажав кнопку «Назад»? Есть ли способ устранить эту непрерывную проблему «пустого изображения» в MainActivity.java
без редактирования в классе CameraPhoto
в моей библиотеке? БлагодаряСоздана фотография с пустой картинкой?
MainActivity.java
CameraPicture cameraPhoto = new CameraPicture(getApplicationContext());
Camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
startActivityForResult(cameraPhoto.takePhotoIntent(), CAMERA_REQUEST);
cameraPhoto.addToGallery();
}
catch (IOException e) {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
}
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
if(requestCode == CAMERA_REQUEST){
String photoPath = cameraPhoto.getPhotoPath();
selectedPhoto = photoPath;
Bitmap bitmap = null;
try {
bitmap = ImageLoader.init().from(photoPath).requestSize(512, 512).getBitmap();
ivImage.setImageBitmap(getRotatedBitmap(bitmap,90));
} catch (FileNotFoundException e) {
Toast.makeText(getApplicationContext(),"Something Wrong while loading the photo!", Toast.LENGTH_SHORT).show();
}
}
}
EDIT: Создан еще один класс Java под названием CameraPicture провести обновленные рекомендуемые коды вместо вызова из библиотеки CameraPhoto .jar файл, чтобы предотвратить конфликт.
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CameraPicture {
private String photoPath;
private Context context;
public String getPhotoPath() {
return this.photoPath;
}
public CameraPicture(Context context) {
this.context = context;
}
public Intent takePhotoIntent() throws IOException {
Intent in = new Intent("android.media.action.IMAGE_CAPTURE");
if(in.resolveActivity(this.context.getPackageManager()) != null) {
File photoFile = this.createImageFileName();
if(photoFile != null) {
in.putExtra("output", Uri.fromFile(photoFile));
}
}
return in;
}
private File createImageFileName() throws IOException {
String timeStamp = (new SimpleDateFormat("yyyyMMdd_HHmmss")).format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = new File (storageDir + "/" + imageFileName + ".jpg");
this.photoPath = image.getAbsolutePath();
return image;
}
public void addToGallery() {
Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
File f = new File(this.photoPath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.context.sendBroadcast(mediaScanIntent);
}
}
Вы вызываете их сами. 'CreateImageFile()'. Вам не нужно создавать этот файл уже. Единственное, что вам нужно, это путь. Ури для этого пути. 'createImageFileName()' будет делать. – greenapps
Привет, спасибо за ответ. Я использовал этот класс из https://github.com/kosalgeek/PhotoUtil библиотеки, найденной онлайн в этом проекте. Поэтому я никогда не ожидал такой проблемы при ее использовании. В любом случае, это связано с тем, что я не могу отредактировать указанный код .jar, где класс ссылается? И я действительно не понимаю, какое решение вы сказали выше, не могли бы вы уточнить? – Vivian
Не создавайте файл. 'Файл image = File.createTempFile (imageFileName," .jpg ", storageDir);'. Вы создаете файл с этим оператором. Вам нужно только имя. путь uri. Поэтому не создавайте файл. Лучше 'File image = new File (storageDir +"/"+ imageFileName +" .jpg ");' И переименуйте функцию, как я предложил ранее. – greenapps