正如标题所示,我可以选择在我的应用中上传图片。 我想有两个选择:点击新图片&从图库中选择。 使用此代码,所有设备上的图库选择都可以正常工作:
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
。
此外,如果内存不足,我的应用程序会被系统杀死,这会让事情变得更复杂。
那么,什么是让用户点击新图片并在我的应用中获取图片路径的最佳方式? 如果使用第三方库更好,哪一个可靠?
答案 0 :(得分:2)
所有相机应用都不尊重EXTRA_OUTPUT。
每当您将任何内容委托给第三方应用时,您都会遇到问题。
此外,如果内存不足,我的应用程序会被系统杀死,这会让事情变得更复杂。
无论如何你需要处理这个问题。将您放在EXTRA_OUTPUT
中的值保存在已保存的实例状态Bundle
中。
什么是让用户点击新图片并在我的应用中获取图片路径的最佳方式?
如果你想坚持ACTION_IMAGE_CAPTURE
,我会选择这个分类:
如果您提供给EXTRA_OUTPUT
的位置中有图片,请使用
如果没有,getData()
中Intent
上的onActivityResult()
返回Uri
(而不是null
),请使用该File
(如果您确实需要ContentResolver
,请将openInputStream()
和Uri
与getParcelableExtra("data")
一起使用,并将内容复制到您自己的文件中)
如果两者都不属实,并且Bitmap
返回值,请将{{1}}保存到文件
如果这些都不是真的,建议用户使用不同的相机应用程序,或者将它们指向您尝试过并且知道有效的应用程序
或者,直接拍照或使用像mine这样的库。