相机意图中返回的 Uri 为空
Uri returned in camera intent is null
我正在尝试创建 Android 应用程序来拍摄照片或将照片上传到服务器。我的主要 objective 是获取意图中返回的照片的 URI。我已按照 [1] 中的步骤进行操作。
问题是,在带有 Lollipop 的 phone 版本 5.1.1 上它工作正常并且意图 returns 照片的 URI,但是在带有 Jelly Bean 的 phone 版本 4.2 上.1,intent中返回的URI为null.
这是我的代码
创建视图并为按钮设置侦听器
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() 为空,因此我无法获取 uri 或图像的文件路径。
谢谢。
[1] http://developer.android.com/training/camera/photobasics.html
在 Whosebug 上,您会根据自己的主题找到这些主题:
My Android camera Uri is returning a null value, but the Samsung fix is in place, help?
Camera activity returning null android
Android Camera : data intent returns null
我正在尝试创建 Android 应用程序来拍摄照片或将照片上传到服务器。我的主要 objective 是获取意图中返回的照片的 URI。我已按照 [1] 中的步骤进行操作。 问题是,在带有 Lollipop 的 phone 版本 5.1.1 上它工作正常并且意图 returns 照片的 URI,但是在带有 Jelly Bean 的 phone 版本 4.2 上.1,intent中返回的URI为null.
这是我的代码
创建视图并为按钮设置侦听器
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() 为空,因此我无法获取 uri 或图像的文件路径。
谢谢。
[1] http://developer.android.com/training/camera/photobasics.html
在 Whosebug 上,您会根据自己的主题找到这些主题:
My Android camera Uri is returning a null value, but the Samsung fix is in place, help?
Camera activity returning null android
Android Camera : data intent returns null