【问题标题】:Unable to save images taken using app?无法保存使用应用程序拍摄的图像?
【发布时间】:2013-03-06 02:44:39
【问题描述】:

我花了很多时间试图解决这个微不足道的问题,但即使在阅读了许多教程和以前提出的问题之后,我似乎也陷入了困境。 我是编程新手,但想变得更好,并相信从错误中学习是最好的方法。

有人可以帮助确定此代码的问题,以及可以采取哪些措施,以便之后将设备相机拍摄的照片保存到手机上,而不是被丢弃和预览。

提前致谢!

相关类的Java代码:

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;

public class Activity_Camera extends Activity implements View.OnClickListener {

    public static final int cameraData = 1;

    ImageButton ib;
    ImageView iv;
    Intent i;
    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);
            //
            i.putExtra(MediaStore.EXTRA_OUTPUT, getOutputMediaFileUri());
            //
            startActivityForResult(i, cameraData);
            break;
        }
    }
    //
    private String getOutputMediaFileUri() {
        File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
        imagesFolder.mkdirs();   
        File image = new File(imagesFolder, "image.jpg");
        Uri uriSavedImage = Uri.fromFile(image);
        Intent imageIntent = null;
        imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);       
        return null;
    }
    //
    @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);

        }

    }

}

【问题讨论】:

  • 请将相关代码(不是整个班级)编辑到您的帖子中。
  • Environment.getExternalStorageDirectory() 返回什么?

标签: java android eclipse camera storage


【解决方案1】:

因为您在 getOutputMediaFileUri 中返回 null return null;

试试这个

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

private Uri getOutputMediaFileUri() {
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
    imagesFolder.mkdirs();   
    File image = new File(imagesFolder, "image.jpg");
    return Uri.fromFile(image);
}

【讨论】:

  • 我已经实现了代码,现在可以保存图像了!问题是应用程序现在崩溃并且只能保存一个图像:/我从 getOutputMediaFileUri 方法中看到的是: - 在设备的根目录中创建了一个名为 MyImages 的文件夹 - 图像文件正在保存为 image.jpg目录-通过返回函数调用我是否正确地假设应用程序崩溃是因为它不知道保存文件后要做什么?我该如何解决这个问题,return 语句之后的任何内容都是“无法访问的代码”。对不起基本的q
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2014-01-14
  • 1970-01-01
  • 2017-09-20
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多