如何在imageview中设置图像后,在onActivityResult中获取图像位图并删除图像

时间:2017-06-24 05:06:50

标签: android android-7.0-nougat

我正在尝试使用FileProvider在Marshmallow和nougat中打开相机,但是没有让位图在onActivityResult方法中的imageview中显示捕获的图像。即使我试图从图像路径获取位图。这是我的代码

 def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end

2 个答案:

答案 0 :(得分:0)

我不知道你的代码是否包含所有内容。但这里有一些要注意的地方:

  • 您应该将照片保存在设备公共目录中
  

通常,用户使用设备相机拍摄的任何照片都应保存在公共外部存储设备中,以便所有应用都可以访问这些照片。

(取自docs

  • 如果您这样做 - 您需要在WRITE_EXTERNAL_STORAGE中声明AndroidManifest.xml

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

  • 使用Android Marshmallow,您必须获得该许可。这是简化版本:

requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 99);
...
....
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
      // Execute your code to create the file and start the camera intent here
}

(阅读更多here

  • 您还必须使用getExternalStoragePublicDirectory中的Environment作为storageDir

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

  • 您的file_path.xml现在应该指向Pictures/

<external-path name="my_pictures" path="Pictures/"/>

  • onActivityResult中,您只需使用从photoUri收到的FileProvider#getUriForFile字段即可设置图片:

imageView.setImageURI(photoUri);

对我来说,这些变化有助于制作一个有效的例子: Take photos with camera and receive image

答案 1 :(得分:-1)

我认为你必须将这个库用于相机和图库:https://github.com/jrvansuita/PickImage你不需要将图像转换为位图。这个库在Marshmallow和nougat中工作正常。