【问题标题】:Camera Intent not working on lower android versions相机意图不适用于较低的 android 版本
【发布时间】:2013-09-26 17:36:29
【问题描述】:

在测试相机意图类时,我尝试根据用户点击的照片设置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();
                }
            }
        }
    }

【问题讨论】:

  • 请解释一下“惨遭失败”是什么意思。
  • @CommonsWare 签出编辑。抱歉含糊了
  • 为什么不直接从文件中加载图片?
  • @CommonsWare 我试过了,效果很好,现在我正在这样做。
  • 它更多的是一种实践,而不是一个正式的项目

标签: android android-intent camera


【解决方案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"));       
}

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2021-02-25
    • 1970-01-01
    • 2019-06-09
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2013-02-21
    相关资源
    最近更新 更多