草庐IT

Android ACTION_IMAGE_CAPTURE Intent

coder 2023-05-07 原文

我们正在尝试使用原生相机应用让用户拍摄一张新照片。如果我们省略 EXTRA_OUTPUT extra 并返回小的位图图像,它就可以正常工作。但是,如果我们在启动前对 Intent 进行 putExtra(EXTRA_OUTPUT,...) ,则一切正常,直到您尝试点击相机应用程序中的“确定”按钮。 “确定”按钮什么也不做。相机应用程序保持打开状态,没有任何锁定。我们可以取消它,但文件永远不会被写入。我们究竟需要做什么才能让 ACTION_IMAGE_CAPTURE 将拍摄的图片写入文件?

编辑:这是通过 MediaStore.ACTION_IMAGE_CAPTURE Intent 完成的,只是为了清楚

最佳答案

这是 well documented bug在某些版本的安卓中。也就是说,在 android 的 google 体验版本中,图像捕获不能像记录的那样工作。我通常在实用程序类中使用类似的东西。

public boolean hasImageCaptureBug() {

    // list of known devices that have the bug
    ArrayList<String> devices = new ArrayList<String>();
    devices.add("android-devphone1/dream_devphone/dream");
    devices.add("generic/sdk/generic");
    devices.add("vodafone/vfpioneer/sapphire");
    devices.add("tmobile/kila/dream");
    devices.add("verizon/voles/sholes");
    devices.add("google_ion/google_ion/sapphire");

    return devices.contains(android.os.Build.BRAND + "/" + android.os.Build.PRODUCT + "/"
            + android.os.Build.DEVICE);

}

然后当我启动图像捕获时,我会创建一个检查错误的 Intent 。

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
if (hasImageCaptureBug()) {
    i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/tmp")));
} else {
    i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}
startActivityForResult(i, mRequestCode);

然后在我返回的 Activity 中,我会根据设备做不同的事情。

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
     switch (requestCode) {
         case GlobalConstants.IMAGE_CAPTURE:
             Uri u;
             if (hasImageCaptureBug()) {
                 File fi = new File("/sdcard/tmp");
                 try {
                     u = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null));
                     if (!fi.delete()) {
                         Log.i("logMarker", "Failed to delete " + fi);
                     }
                 } catch (FileNotFoundException e) {
                     e.printStackTrace();
                 }
             } else {
                u = intent.getData();
            }
    }

这让您不必编写新的相机应用程序,但这段代码也不是很好。最大的问题是

  1. 您永远不会从 有 bug 的设备。你得到 512px 宽的图片 被插入到图像内容中 提供者。在没有 错误,一切都像文件一样工作, 你会得到一张正常的大图。

  2. 您必须维护该列表。作为 写,它是可能的设备 用一个版本闪烁 修复了该错误的android(例如cyanogenmod's builds)。 如果发生这种情况,您的代码将 碰撞。解决方法是使用整个 设备指纹。

关于Android ACTION_IMAGE_CAPTURE Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910608/

有关Android ACTION_IMAGE_CAPTURE Intent的更多相关文章

  1. ruby-on-rails - Rails - Carrierwave 进程抛出 ArgumentError : no images in this image list - 2

    在尝试实现应用auto_orient的过程之后!对于我的图片,我收到此错误:ArgumentError(noimagesinthisimagelist):app/uploaders/image_uploader.rb:36:in`fix_exif_rotation'app/controllers/posts_controller.rb:12:in`create'Carrierwave在没有进程的情况下工作正常,但在添加进程后尝试上传图像时抛出错误。流程如下:process:fix_exif_rotationdeffix_exif_rotationmanipulate!do|image|

  2. ruby-on-rails - 带有选项的 link_to image_tag (rel, title) - 2

    在HTML中我会写:但我必须针对ruby​​onrails对其进行调整,而且我对它还很陌生...所以我尝试了:rel="lightbox"title="mycaption">...但它不起作用,因为“rel="lightbox"title="mycaption">”部分未应用但出现在html部分上+我看到了2个图像,而我应该只看到“imagethumb”。我也试过:"lightbox",:title=>"mycaption")%>我也看到了这两张图...我应该怎么做才能获得与我编写的HTML代码等效的内容? 最佳答案 试试这个"")

  3. ruby - 在 ruby​​ 中使用 matplotlib.image 是否有等效项 - 2

    一直在尝试在jupyternotebook中使用Ruby。使用Python我可以做到这一点importmatplotlib.imageasmpimg有谁知道Ruby的等价物,我没能在任何iRuby或sciruby文档中找到它?澄清一点,在我的gemfile中我有这个gem'iruby'gem'cztop'gem'matplotlib'但似乎无法访问我习惯在python中使用的matplotlib的image部分。我正试图找到在Python中我会这样写的Ruby版本#importingsomeusefulpackagesimportmatplotlib.pyplotaspltimport

  4. ruby-on-rails - rails : Active Admin Association Image column - 2

    我是ruby​​onrails的新手,刚刚安装了activeadmin并尝试自定义观看次数。我有一个产品和图像表。每张图片属于一个产品。现在我想在显示产品页面时显示一个带有相关图像的列。目前只有image_url文本不起作用。稍后我想做让图片以50x50px显示。我该怎么做?(图片模型:名称:字符串image_url:文本)这是我所做的:ActiveAdmin.registerProductdoindexdocolumn"Image"do|image|image.image_urlendcolumn:namecolumn:preview_textcolumn:full_textcolu

  5. ruby-on-rails - 回形针 gem - "Image has contents that are not what they are reported to be"错误 - 2

    该网站的功能是发布博客文章。它在Windows7上本地运行。我试过Paperclipgem(版本4.2.4和4.3)并且服务器在cmd中进入无限循环(在4.2.4上没有发生但仍然出现错误)。我做了bundleinstall并且它确实安装了。gem文件:gem"paperclip","~>4.3"这是模型:classPost":style/rails1.jpg"validates_attachment_content_type:image,:content_type=>/\Aimage\/.*\Z/end这是我在尝试提交图像(png或jpg)时遇到的错误:Imagehascontents

  6. ruby-on-rails - rails 3 : link_to and image_tag - 2

    我怎样才能在我的public/images中有一个链接到文件background.jpg的图像标签,当点击时将用户重定向到root_url(所以页面的内容在一个容器中如果用户点击背景图片会被重定向到主页?)谢谢! 最佳答案 当然:"homeimage",:width=>100,:height=>100,:title=>"ClickheretoreturntoHome")"/")%> 关于ruby-on-rails-rails3:link_toandimage_tag,我们在StackOv

  7. ruby - RMagick - ImageMagick 给出错误 "no decode delegate for this image format" - 2

    当我尝试操作从sinatra上传的图像时出现问题。File.open(params[:file][:tempfile])do|p|thumb=Magick::Image.read(p)thumb.crop_resized!(75,75,Magick::NorthGravity)end上传的文件是jpeg,上传图片时的表单数据包括{:filename=>"299732_176749115737355_100002068035867_380115_618512842_n.jpg",:type=>"image/jpeg",:name=>"file",:tempfile=>#,:head=>"

  8. ruby - Wicked-PDF 不显示图像, 'wicked_pdf_image_tag' 未定义 - 2

    我想生成一个包含我们部门Logo的PDF。当我尝试在我的Controller中使用WickedPdf类时(使用https://github.com/mileszs/wicked_pdf中描述的方法):defsome_actionimage_tag_string=image_tag('logo.jpg')pdf=WickedPdf.new.pdf_from_string(image_tag_string)save_path=Rails.root.join('testpdfs','logotest.pdf')File.open(save_path,'wb')do|file|file...应

  9. ruby-on-rails - Rails 如何使用 image_tag 列出文件夹中的所有图像? - 2

    我正在尝试获取“app/assets/images/slide”文件夹中的所有图像并将它们放入标签(按顺序)。所以,它看起来像这样:我怎样才能做到这一点?(我使用的是Rails3.2.9)这是我试过的代码(感谢Khaled)。但它输出所有图像路径的纯文本列表。我需要显示图像:@images=Dir.glob("app/assets/images/slide/*.jpg")@images.eachdo|image|image_tagimage.gsub("app/assets/images/","")end 最佳答案 在您的Contr

  10. ruby - 迷你魔术 : Cut circle out of square image - 2

    我需要用MiniMagick将方形图像转换为圆形图像.我知道有一个way使用ImageMagick:convert-size300x300xc:transparent-fill"image.png"-draw"circle240,90290,90"-crop100x100+190+40+repagecircle1.png我试过翻译:img.combine_optionsdo|c|c.draw"circle240,90290,90"c.crop"100x100+190+40"c.repage.+end我得到了这个东西,一个以我的大Nose为背景的黑色圆圈:如果有人知道如何正确翻译这个..

随机推荐