我正在尝试使用相机在我的应用中拍照,然后裁剪拍摄的图像。
一切适用于Android的最新版本,但不适用于Android Kitkat 4.4.2。
Camera返回一个空URI。
获取URI onActivityReslult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_CODE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
picUri = data.getData();
Intent i = new Intent(PublierActivity.this, CropActivity.class);
i.putExtra("Uri", picUri);
startActivityForResult(i, CROP_CODE);
}
以下是我如何调用相机意图:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, CAMERA_CODE);
}
有没有办法为Android的旧版本做出例外来解决这个问题?
答案 0 :(得分:1)
从您的代码中,您似乎正在尝试使用ACTION_IMAGE_CAPTURE
。在这种情况下,永远不会成为Uri
- data.getData()
应始终返回null
。如果相机应用程序碰巧返回Uri
,可能成为图像,但由于ACTION_IMAGE_CAPTURE
未记录为返回Uri
,您无法了解Uri
的用途。
如果您在EXTRA_OUTPUT
ACTION_IMAGE_CAPTURE
上使用Intent
,则知道应该存储图片的位置,因为您告诉相机应用程序存储位置。请注意,某些相机应用程序存在错误,无法兑现EXTRA_OUTPUT
,无法将图像放在任何位置。
如果您没有使用EXTRA_OUTPUT
,那么您将在"data"
附加内容中获得缩略图。
另外,请记住,这与Android操作系统版本无关,而且与用户选择使用的相机应用程序有关。有数以千计的Android设备型号。这些预装了几十个(如果不是数百个)不同的相机应用程序。用户可能还会选择安装第三方相机应用程序。其中任何一个都可以处理您的请求。