【问题标题】:Proper solution to pick/click an image on Android在 Android 上选择/单击图像的正确解决方案
【发布时间】:2017-01-30 20:48:56
【问题描述】:

正如标题所示,我可以选择在我的应用中上传图片。 我想要两个选项:单击新图片并从图库中选择。 画廊选择在使用此代码的所有设备上都可以正常工作:

Intent in = new Intent();
in.setType("image/*");
in.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(in, getString(R.string.selectpicture)), 100);

问题在于Click a new picture

我想使用设备上安装的其他相机应用来获取图像。 此代码应将用户点击的图像保存在指定路径。

Intent m_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageUri = getImageUri();
m_intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(m_intent, REQUEST_IMAGE_CAPTURE);

但是发生的情况是,EXTRA_OUTPUT 并非所有相机应用程序都尊重。

此外,如果内存不足,我的应用程序会被系统杀死,这会使事情变得更加复杂。

那么,让用户点击新图片并在我的应用中获取图片路径的最佳方式是什么? 如果使用第三方库更好,哪个可靠?

【问题讨论】:

    标签: android android-camera android-camera-intent android-camera2


    【解决方案1】:

    并非所有相机应用都尊重 EXTRA_OUTPUT。

    任何时候您将任何事情委托给第三方应用程序,您都可能会遇到问题。

    此外,如果内存不足,我的应用程序会被系统杀死,这会使事情变得更加复杂。

    无论如何,您都需要处理这个问题。将您在EXTRA_OUTPUT 中输入的值保存为已保存的实例状态Bundle

    让用户点击新图片并在我的应用中获取图片路径的最佳方式是什么?

    如果你想坚持使用ACTION_IMAGE_CAPTURE,我会选择这个分类:

    • 如果您提供给EXTRA_OUTPUT的位置有图片,请使用它

    • 如果不是,并且在onActivityResult() 中给你的Intent 上的getData() 返回一个Uri(而不是null),使用它(如果你真的需要一个File , 将ContentResolveropenInputStream()Uri 一起使用并将内容复制到您自己的文件中)

    • 如果两者都不为真,并且getParcelableExtra("data") 返回一个值,则将该Bitmap 保存到文件中

    • 如果这些都不正确,建议用户获取其他相机应用程序,或许可以将他们指向您尝试过并且知道有效的应用程序

    或者,自己拍照,直接或使用mine 之类的库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-08
      • 2021-11-06
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多