2016-09-14 10 views
0

В галерее всегда создаются и сохраняются «пустые изображения», хотя я решил не брать изображение и выйти из экрана камеры, нажав кнопку «Назад»? Есть ли способ устранить эту непрерывную проблему «пустого изображения» в 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); 
    } 
} 
+0

Вы вызываете их сами. 'CreateImageFile()'. Вам не нужно создавать этот файл уже. Единственное, что вам нужно, это путь. Ури для этого пути. 'createImageFileName()' будет делать. – greenapps

+0

Привет, спасибо за ответ. Я использовал этот класс из https://github.com/kosalgeek/PhotoUtil библиотеки, найденной онлайн в этом проекте. Поэтому я никогда не ожидал такой проблемы при ее использовании. В любом случае, это связано с тем, что я не могу отредактировать указанный код .jar, где класс ссылается? И я действительно не понимаю, какое решение вы сказали выше, не могли бы вы уточнить? – Vivian

+0

Не создавайте файл. 'Файл image = File.createTempFile (imageFileName," .jpg ", storageDir);'. Вы создаете файл с этим оператором. Вам нужно только имя. путь uri. Поэтому не создавайте файл. Лучше 'File image = new File (storageDir +"/"+ imageFileName +" .jpg ");' И переименуйте функцию, как я предложил ранее. – greenapps

ответ

0
cameraPhoto.addToGallery(); 

OMG. Вы вызываете это в прослушивателе кликов. Очень плохое место. Вы должны сделать это только в onActivityResult().

Только после того, как снимок сделан.

Сказав, что я нахожу имя функции неправильным. Вы ничего не добавляете в Галерею, так как нет галереи. Существует только приложение «Галерея». И часто есть приложения Gallery. Вы добавляете свой файл в MediaStore. Приложения Gallery и Fotos запрашивают MediaStore для изображений.

+0

Спасибо вам большое! Я знал, что что-то пошло не так, но не понимал, что небольшая ошибка может его создать .. – Vivian

Смежные вопросы