获取通过Intent发送的捕获图像

时间:2016-09-04 17:08:20

标签: android android-intent position android-arrayadapter android-bitmap

我正在开展一个简单的项目,我想创建一个记笔记应用程序。我已经成功创建了应用程序,但现在我希望用户可以拍摄照片并将其与照片一起保存。 我可以拍照,预览,然后点击保存。 但问题是,我无法通过意图将图像发送到我的MainActivity类,其中假设要保存笔记。

所以我的问题是如何将图片保存到图片中,请查看代表我希望customRow看起来如何的图片 enter image description here

我不知道为什么会发生这种情况因为我没有错误......而且它让我疯了。 任何想法??

Image.class

public void capturePhoto(View view){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        fileUri = getOutputMediaFileUri();
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

        // start the image capture Intent
        startActivityForResult(intent, CAPTURE_IMAGE);
    }
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {

        switch (requestCode){
            case CAPTURE_IMAGE:
                previewCapturedImage();
                break;
        }

    }
    else if (resultCode == RESULT_CANCELED) {
        // user cancelled Image capture
        Toast.makeText(getApplicationContext(),
                "User cancelled image capture", Toast.LENGTH_SHORT)
                .show();
    } else {
        // failed to capture image
        Toast.makeText(getApplicationContext(),
                "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                .show();
    }

}
private void previewCapturedImage() {
    try {
        // bitmap factory
        BitmapFactory.Options options = new BitmapFactory.Options();

        // downsizing image as it throws OutOfMemory Exception for larger
        // images
        options.inSampleSize = 2;

        bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
                options);

        //Set image here
        imageView.setImageBitmap(bitmap);

    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}

 public void sendImageAsIntent(Boolean isSending){
    if(isSending = false){
       isSending = true;

    }
    if(isSending = true) {
        Intent i = new Intent(CheckOutMemo.this, MainActivity.class);
        i.putExtra("filePath", fileUri.getPath());
        setResult(RESULT_OK,i);
        finish();
    }
}

MainActivity.class

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode != Activity.RESULT_OK) {
        return;
    }
    if (requestCode == Image.ADD_REQUEST_CODE) {
        String header = data.getStringExtra("header");
        String bodyText = data.getStringExtra("bodyText");

        filePath = data.getStringExtra("filePath");
        sourceFile = new File(filePath);
        fileName = data.getStringExtra("filePath");
        Uri imageUri = data.getData();
        if(filePath!=null) {
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);
                imageIcon.setImageBitmap(bitmap);

            } catch (FileNotFoundException e) {
                Toast.makeText(MainActivity.this, "FileNoutFoundException MainActivity", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            } catch (IOException e) {
                Toast.makeText(MainActivity.this, "IOException MainActivity", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }


        Memo memo = new Memo(header, bodyText,imageIcon);
        customAdapter.add(memo);
        customAdapter.notifyDataSetChanged();
    } else if (requestCode == Image.EDIT_REQUEST_CODE) {

        int position = data.getIntExtra("position", 0);
        Memo memo = customAdapter.getItem(position);
        memo.header = data.getStringExtra("header");
        memo.bodyText = data.getStringExtra("bodyText");
        customAdapter.notifyDataSetChanged();
    }

}

1 个答案:

答案 0 :(得分:1)

当你这样做时:

Intent i = new Intent(CheckOutMemo.this, MainActivity.class);
i.putExtra("filePath", fileUri.getPath());
startActivity(i);

您基本上要求创建MainActivity的新实例。要在设置结果时返回上一个活动,请执行以下操作:

setResult(RESULT_OK, i);  
finish();//finishing activity