java - 在android应用程序中保存相机拍摄的照片

标签 java android storage android-camera

我已经坚持了一段时间,并查看了各种教程寻求帮​​助,但尚未成功。

我基本上利用了我的应用中的相机功能来拍摄照片并显示它的预览 但是它无法保存拍摄的照片。

这里是 java 代码,其中包含我根据教程尝试使其运行的尝试:

public class Activity_Camera extends Activity implements View.OnClickListener {

    ImageButton ib;
    ImageView iv;
    Intent i;
    public static final int cameraData = 0;
    Bitmap bmp;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.Info:

            Intent i = new Intent(this, Help.class);
            startActivity(i);

            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);
        initialise();
    }

    private void initialise() {
        iv = (ImageView) findViewById(R.id.ivPicReturn);
        ib = (ImageButton) findViewById(R.id.ibTakePic);

        ib.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.ibTakePic:
            i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(i, cameraData);
            break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            bmp = (Bitmap) extras.get("data");
            iv.setImageBitmap(bmp);

            Toast.makeText(this, "Image saved to:\n" +
                    data.getData(), Toast.LENGTH_LONG).show();
       } else if (resultCode == RESULT_CANCELED) {
           // User cancelled the image capture
       } else {
           // Image capture failed, advise user
       }
    }

    private static Uri getOutputMediaFileUri(int type){
          return Uri.fromFile(getOutputMediaFile(type));
    }
    private static File getOutputMediaFile(int type){

        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                  Environment.DIRECTORY_PICTURES), "MyCameraApp");

        if (! mediaStorageDir.exists()){
            if (! mediaStorageDir.mkdirs()){
                Log.d("MyCameraApp", "failed to create directory");
                return null;
            }
        }
        File mediaFile;
        if (type == cameraData){
            mediaFile = new File(mediaStorageDir.getPath() + File.separator +
            "IMG_" + ".jpg");
        } else {
            return null;
        }
        return mediaFile;
    }
}

我已经在 Manifest.xml 文件中包含了所有必要的权限

最佳答案

File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
imagesFolder.mkdirs();   
File image = new File(imagesFolder, "image.jpg");
Uri uriSavedImage = Uri.fromFile(image);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);

看看这个链接。 How to save images from Camera in Android to specific folder?

关于java - 在android应用程序中保存相机拍摄的照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214321/

相关文章:

java - Java中循环内部和外部定义对象的不同

java - 如何找出设备中存在的广告垃圾?

storage - 无限(或非常高)长度的整数存储

java - Log4j2,文件中没有日志

64-bit - 为什么我应该使用 64 位 JDK 而不是 32 位版本?

android - 如何获取推送通知的 Android 设备 token ?

java - 是否可以从 Java 代码绑定(bind)和访问 C 结构成员?

java - Kitkat 上安装的崩溃生命周期组件

java - 如何获取Android SD卡大小?

java - 如何从xsd生成Json兼容的POJO