【问题标题】:Not able to place a image in ImageView After taking a pic from camera only in Pixel_Api_26 emulator仅在 Pixel_Api_26 模拟器中从相机拍摄照片后,无法在 ImageView 中放置图像
【发布时间】:2018-04-20 17:17:27
【问题描述】:

我正在尝试从我的应用程序中的 cam 拍摄照片,但它工作正常但无法在 imageview 中显示它会引发错误..

请帮帮我

我的代码是

在解码 bitmapUri 时出错(我在代码中提到过)

错误是:

private void onCaptureImageResult(Intent 数据) {

          Log.w("CAM","capture image result");
          launchMediaScanIntent();

          try {
              File photo = new File(Environment.getExternalStorageDirectory(), "picture.jpg");
              Log.w("CAM","decoding bitmap uri");
              Context context=FSE_login.this;
              Bitmap bitmap = decodeBitmapUri(this, FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".lerainfotech.tezmoney.FSE_login", photo));
              Log.w("CAM","decoded");
              attendance_pic = Utils.getResizedBitmap(bitmap);
              Log.w("CAM","attached");
              attendance_pic_field.setImageBitmap(attendance_pic);
          } catch (Exception e) {

              Log.w("Error Is",e);
              Utils.showErrorDialog(getApplicationContext(), "Couldn't load image");
              return;
          }
      }

【问题讨论】:

  • 我的错误是:java.io.FileNotFoundException:打开失败:在 android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:313) 在 android.os.ParcelFileDescriptor 的 ENOENT(没有这样的文件或目录) .open(ParcelFileDescriptor.java:211) 在 android.support.v4.content.FileProvider.openFile(FileProvider.java:544) 在 android.content.ContentProvider.openAssetFile(ContentProvider.java:1538

标签: android android-intent android-camera android-permissions


【解决方案1】:

首先你需要在 Mainifest 中编写以下代码

<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

你的活动应该是这样的

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
    }else{
        captureImage();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == 0) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            captureImage();
        }
    }
}
private void captureImage(){
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File photo = new File(Environment.getExternalStorageDirectory(), "picture.jpg");
    imageUri = Uri.fromFile(photo);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intent, REQUEST_CAMERA);
}

【讨论】:

  • 它给出了这个错误兄弟:android.os.FileUriExposedException: file:///storage/emulated/0/picture.jpg 通过 ClipData.Item.getUri() 暴露在应用之外
  • @PrasanthYejje 这只是因为你的目标是 24 或更高的 api 级别试试这个链接stackoverflow.com/questions/38200282/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多