【问题标题】:Trying to display image taken from camera intent尝试显示从相机意图拍摄的图像
【发布时间】:2013-12-21 12:23:58
【问题描述】:

我目前正在尝试从MainActivity 的默认相机意图拍摄照片,然后将该图像放入同一活动中的ImageView

我正在保存图像,以便拍摄的图像覆盖之前拍摄的图像(在这种情况下,我将图像称为 test.jpg 并将其存储在 sdcard 中)

我的代码现在遇到的问题是ImageView 显示应用程序上次运行时拍摄的照片。

这是我的代码。

public class MainActivity extends Activity 
{
ImageView imv;
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imv = (ImageView)findViewById(R.id.imv);
    Uri uri = null;
    String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.jpg";
    try
    {
        uri = takePhoto(path);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    imv.setImageURI(uri);
}

private Uri takePhoto(String path) throws IOException
{
    File photo = new File(path);
    photo.createNewFile();
    Uri fileUri = Uri.fromFile(photo);
    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult(cameraIntent, 0);
    fileUri = Uri.fromFile(new File(path));
    return fileUri;
}   
}

【问题讨论】:

标签: java android android-intent imageview


【解决方案1】:

尝试在onActivityResult中设置图片如下:

  protected void onActivityResult(int requestCode, int resultCode, Intent ata)                                     
          {
if (requestCode == 0) {
    if (resultCode == RESULT_OK) {

       imv = (ImageView)findViewById(R.id.imv);
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        imv.setImageBitmap(photo);
    }}}

【讨论】:

  • 谢谢。这使它工作。 onActivityResult 有什么作用?你能给我解释一下吗?
  • 当用户完成后续活动并将结果返回到当前活动时,系统会调用您活动的onActivityResult() 方法。 Android 的相机应用返回的结果Intent 提供了一个内容Uri,用于标识捕获的图像。为了成功处理结果,您必须了解结果Intent 的格式。当返回结果的活动是您自己的活动之一时,这样做很容易。 Android 平台附带的应用程序提供了自己的 API,您可以依靠这些 API 来获取特定的结果数据。
  • onActivityResult 在您启动的活动退出时调用,为您提供启动它的 requestCode、它返回的 resultCode 以及来自它的任何其他数据。 resultCode 将是 RESULT_CANCELED 如果活动明确返回,没有返回任何结果,或在其操作期间崩溃。
【解决方案2】:
 private static final int     PICK_CONTACT_REQUEST = 0 ;
 protected void onActivityResult(int requestCode, int resultCode,
                 Intent data) {
             if (requestCode == PICK_CONTACT_REQUEST) {
                 if (resultCode == RESULT_OK) {

                    imv.setImageURI(uri);

                 }
             }
         }

在活动结果中设置图像,它将显示从相机拍摄的新图像。

【讨论】:

    【解决方案3】:

    试试这个,

    private Uri takePhoto(String path) throws IOException
        {
            File photo = new File(path);
            photo.createNewFile();
            if(photo.exists())
                photo.delete();
            photo = new File(path);
            Uri fileUri = Uri.fromFile(photo);
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            startActivityForResult(cameraIntent, 0);
            fileUri = Uri.fromFile(new File(path));
            return fileUri;
        }   
    

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 1970-01-01
      • 2014-01-18
      • 2011-07-15
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多