2015-12-13 51 views
0

我正在尝试创建和Android应用程序拍摄照片或将照片上载到服务器。我的主要目标是获取意图返回的照片的URI。我遵循了[1]中的步骤。 问题是,在具有Lollipop版本5.1.1的电话上,它工作正常,意图返回照片的URI,但在具有Jelly Bean版本4.2.1的电话中,意图返回的URI为null 。Uri返回相机意图为空

这里是我的代码

创建视图,并设置监听器按钮

static final int REQUEST_TAKE_PHOTO = 1; 
static final int REQUEST_GET_PHOTO = 2; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_home_page, container, false); 

    camera = (FloatingActionButton) view.findViewById(R.id.take_photo); 
    upload = (FloatingActionButton) view.findViewById(R.id.upload_photo); 
    photo = (ImageView) view.findViewById(R.id.photo); 

    camera.setOnClickListener(takePhoto); 
    upload.setOnClickListener(uploadPhoto); 

    return view; 
} 

拍照动作

View.OnClickListener takePhoto = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
       startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
      } 
     } 
    }; 

从画廊听众上传

View.OnClickListener uploadPhoto = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
     if (photoPickerIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
      photoPickerIntent.setType("image/*"); 
      startActivityForResult(photoPickerIntent, REQUEST_GET_PHOTO); 
     } 
    } 
}; 

处理意向结果

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == Activity.RESULT_OK && (requestCode == REQUEST_TAKE_PHOTO || requestCode == REQUEST_GET_PHOTO)) { 

     Uri imageUri = data.getData(); 

     try { 
      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getApplicationContext().getContentResolver(), imageUri); 
      String filePath = getPath(imageUri); 
      bitmap = BitmapRotator.rotateBitmap(bitmap, filePath); 

      photo.setImageBitmap(bitmap); 
      UploadPhotoController.uploadPhoto(filePath); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (PhotoNotFoundException e) { 
      e.printStackTrace(); 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

data.getData()为null,因此,我不能得到的URI,或图像的文件路径。

谢谢。

[1]在计算器上,你会根据你找到这些主题http://developer.android.com/training/camera/photobasics.html

+0

您可以加入整体功能,而不是这个只有部分? – RafaelC

+0

我添加了洞功能 – Ancuta

+0

这可能是您的JB设备上的摄像机意图的错误实施。尝试在此设备上安装[打开相机](https://play.google.com/store/apps/details?id=net.sourceforge.opencamera&hl=en),并检查其行为是否有所不同。 –

回答