我试图在一个意图中从相机或画廊(无论用户选择什么)获取图像。问题是我总是在intent.getData()
中将OnActivityResult
视为空。
我按照建议here执行以下操作:
Intent pickIntent = new Intent();
pickIntent.setType("image/*");
pickIntent.setAction(Intent.ACTION_GET_CONTENT);
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String pickTitle = "Select or take a new Picture"; // Or get from strings.xml
Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { takePhotoIntent });
startActivityForResult(chooserIntent, SELECT_PICTURE);
OnActivityResult:
if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) {
if (data != null) {
try {
final Uri imageUri = data.getData();
Log.e("uri", imageUri + "");
uri为空
答案 0 :(得分:0)
好吧,ACTION_IMAGE_CAPTURE
不会返回Uri。
但是,如果你真的想通过使用它来拍照后获得Uri,那么你需要指定图片的路径(它会将照片保存在该路径上,所以这不是暂时的)。
这是其中一个示例(这将创建目录并为您的图像准备新文件):
// Determine Uri of camera image to save.
File root = new File(
Environment.getExternalStorageDirectory() + File.separator + locationName + File.separator);
root.mkdirs();
String fname = imagePrefixName + System.currentTimeMillis() + ".jpg";
File imageMainDirectory = new File(root, fname);
Uri outputFileUri = Uri.fromFile(imageMainDirectory); //make sure you store this in the place that can be accessed from your onActivityResult
在您决定输出后&存储它,然后你需要在你的相机上实现这样的uri:
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
然后,当您收到数据时,您可以执行此操作以检查图片是来自图库还是相机(存储的图片上有Uri):
final Uri imageUri = data.getData();
if (imageUri == null)
{
imageUri = outputFileUri;
}
确保您实现了写&的权限。读外部存储&有了这个,我想你会得到你想要的Uri。