【问题标题】:Photo Gallery kept having "blank image" generated?照片库不断生成“空白图像”?
【发布时间】:2016-09-14 05:59:55
【问题描述】:

即使我决定不拍照并按后退按钮退出相机屏幕,画廊中总是会生成并存储“空图像”?有没有办法消除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();
                    }
                }
}

编辑:创建了另一个名为 CameraPicture 的 java 类来托管更新的推荐代码,而不是从库 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()。您不需要已经创建该文件。您唯一需要提供的是路径。该路径的 uri。 createImageFileName() 可以。
  • 您好,感谢您的回复,我使用了来自在线找到的github.com/kosalgeek/PhotoUtil 库的这个类到这个项目中。所以我从没想过在使用它时会出现这样的问题。无论如何,这是因为我无法编辑引用该类的指定代码.jar吗?而且我不太明白你上面所说的解决方案你能更准确吗?
  • 不创建文件。 File image = File.createTempFile(imageFileName, ".jpg", storageDir);。您正在使用该语句创建一个文件。你只需要一个名字。一个路径一个uri。所以不要创建文件。更好File image = new File ( storageDir + "/" + imageFileName + ".jpg"); 并按照我之前的建议重命名函数。
  • 您好,通过创建另一个类来运行更新的代码尝试了您推荐的方法,但是当我选择不拍照并退出相机视图时,画廊中仍会继续创建空白图像?这是这里的原始项目链接drive.google.com/file/d/0B2rvGRbu0A83LU1pQjRicnNFS0U/view
  • 抱歉,我不会关注该链接。我只想看你的相关代码。

标签: android image camera gallery photo


【解决方案1】:
cameraPhoto.addToGallery(); 

天哪。您在点击监听器中调用它。非常错误的地方。你应该只在onActivityResult() 中这样做。

仅在拍照后。

话虽如此,我发现函数名称错误。由于没有画廊,因此您没有向画廊添加任何内容。只有一个图库应用程序。并且通常有更多的图库应用程序。您正在将文件添加到 MediaStore。 Gallery 和 Fotos 应用程序会在 MediaStore 中查询图像。

【讨论】:

  • 非常感谢!!!我知道某个地方出了问题,但没有意识到一个小错误会造成它..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2011-02-19
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多