捕获图像并将其传输到另一个活动

时间:2015-06-26 17:40:31

标签: java android

我需要帮助。 我有一个像Meme Generator这样的项目,我有两个活动。 Activity_main(用户界面并有一个触发按钮"选择摄像机选项" 和Creatememe(作为第二个活动显示来自Activity_main的捕获图像)。

现在我的问题是,当我使用Android 4.0.4降低版本时图像正在通过第二个活动。 使用高于4.0.4的Android版本时,图像没有传递给第二个活动,图像只显示在Activity_main中。 preview.setImageBitmap(bitmap)//< - 在Activity_main中显示图像。

以下是AndroidManifest文件的代码

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera"/>

然后这是我的Activity_main代码

try {
    InputStream input = getContentResolver().openInputStream(selectedImageUri);
    final Bitmap bitmap = BitmapFactory.decodeStream(input);
    preview.setImageBitmap(bitmap);

    preview.setDrawingCacheEnabled(true);
    Bitmap b= preview.getDrawingCache();

    Intent i = new Intent(this, CreateMeme.class);

    i.putExtra("Bitmap", b);
    startActivity(i);

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

然后是我的第二个活动代码

imageView = (ImageView) findViewById(R.id.imageView2);
Intent intent = getIntent();
Bitmap bitmap = intent.getParcelableExtra("Bitmap");
imageView.setImageBitmap(bitmap);

1 个答案:

答案 0 :(得分:0)

在“选择摄像机选项”的OnClickListener上使用下一个方法

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

然后,覆盖OnActivityResult并像这样处理结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Intent intent = new Intent(MainActivity.this,CreateMeme.class);
        intent.putExtras(extras);
        startActivity(intent);
    }
}

在你的CreateMeme.class上处理类似的附加内容 -

imageView = (ImageView) findViewById(R.id.imageView2);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
imageView.setImageBitmap(bitmap);

有关详细信息,请参阅此link