0

在测试相机意图类时,我尝试根据用户点击的照片设置 imageView 在低于 Android 3.0 的设备上失败了(imageView 不显示拍摄的图像)。该类在后者的 Android 设备中运行良好。

此代码是否需要进行任何更改,以便低于 Android 3.0 的设备也可以支持此项目?

初始定义

    private static final int TAKE_PICTURE = 0;
    private Uri mUri;
    private Bitmap mPhoto;

button.onClick 方法:

    Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
    File f = new File(Environment.getExternalStorageDirectory(),  "photo.jpg");
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
    mUri = Uri.fromFile(f);
    startActivityForResult(i, TAKE_PICTURE);

最后是onActivityResult:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case TAKE_PICTURE:
            if (resultCode == Activity.RESULT_OK) {
                getContentResolver().notifyChange(mUri, null);
                ContentResolver cr = getContentResolver();
                try {
                    mPhoto = android.provider.MediaStore.Images.Media.getBitmap(cr, mUri);
                    ((ImageView)findViewById(R.id.photo_holder)).setImageBitmap(mPhoto);
                } catch (Exception e) {
                    Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
4

1 回答 1

1

您应该将 uri 保存在 onSaveInstanceState 中。由于旧设备内存不足,当他们启动像相机这样的新应用程序时,他们会停止您的应用程序。相机的活动完成后,它会再次从保存的状态重新创建您的活动。

@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);

    if (mUri!= null) {

        outState.putString("cameraImageUri", mUri.toString());

    }

}

在你的 onCreate 做这样的事情

if (savedInstanceState != null) 
{
  mUri=Uri.parse(savedInstanceState.getString("cameraImageUri"));       
}
于 2013-09-26T18:10:43.083 回答