在Android上选择/点击图片的正确解决方案

时间:2017-01-30 20:48:57

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

  

所有相机应用都不尊重EXTRA_OUTPUT。

每当您将任何内容委托给第三方应用时,您都会遇到问题。

  

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

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

  

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

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

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

  • 如果没有,getData()Intent上的onActivityResult()返回Uri(而不是null),请使用该File (如果您确实需要ContentResolver,请将openInputStream()UrigetParcelableExtra("data")一起使用,并将内容复制到您自己的文件中)

  • 如果两者都不属实,并且Bitmap返回值,请将{{1}}保存到文件

  • 如果这些都不是真的,建议用户使用不同的相机应用程序,或者将它们指向您尝试过并且知道有效的应用程序

或者,直接拍照或使用像mine这样的库。