仅在 Pixel_Api_26 模拟器中从相机拍摄照片后,无法在 ImageView 中放置图像

Posted

技术标签:

【中文标题】仅在 Pixel_Api_26 模拟器中从相机拍摄照片后,无法在 ImageView 中放置图像【英文标题】:Not able to place a image in ImageView After taking a pic from camera only in Pixel_Api_26 emulator 【发布时间】: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 【参考方案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 级别试试这个链接***.com/questions/38200282/…

以上是关于仅在 Pixel_Api_26 模拟器中从相机拍摄照片后,无法在 ImageView 中放置图像的主要内容,如果未能解决你的问题,请参考以下文章

仅在三星设备中从相机单击时图像会旋转

Error while waiting for device: The emulator process for AVD Pixel_API_30 has terminated.

在棒棒糖中通过相机拍摄照片后,在 onActivityResult() 方法中获取空意图

如何在android中保存从相机拍摄的图像

在flutter中从image_picker包中打开相机会导致真实设备上的应用程序崩溃,但在模拟器(android)中运行良好

如何使用opencv将鱼眼相机拍摄的图像转换为平面(矩形)图像?