我已经开始在Moto E2上测试我的应用程序,这是标记上的第一批Android Lollipop设备之一。事实证明,我出乎意料地使用相机无法捕捉图像。我无法收到照片。
使用以下方法创建图像捕获意图:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, PICK_FROM_CAMERA);
返回我的活动后,Intent
不包含任何数据,即data.getData()
返回null。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) return;
switch(requestCode) {
case PICK_FROM_CAMERA:
(...)
}
}
在运行Android 5.0.2的Moto E2上:
现在有很多关于SO的问题,其中有类似的问题和各种不同的原因。这里让我感到困惑的是,这个代码在运行KitKat和Jelly Bean的其他Android设备上运行得很好(见下文)。 这种行为可能是什么原因,我该如何解决?
在运行Android 4.4.2的Galaxy S4 mini上:
答案 0 :(得分:2)
问题可以通过上面的Jibran Khan评论(取自https://developer.android.com/training/camera/photobasics.html#TaskCaptureIntent的Android文档)解决。
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
...
}
// Continue only if the File was successfully created
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
与
String mCurrentPhotoPath;
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
return image;
}
其中mCurrentPhotoPath
可用于在onActivityResult()
中获取文件。
这将返回一个完整大小图像的路径,而不是data
参数,它返回一个缩略图。
答案 1 :(得分:2)
我也遇到了不同制造商和Android版本的不同Android设备上相机意图的一些问题(请参阅此处的原始帖子:Summary: Take a picture utilizing Camera Intent and display the photo with correct orientation (works on hopefully all devices))
我在github上发布了我的代码: https://github.com/ralfgehrer/AndroidCameraUtil
答案 2 :(得分:1)
Android 5.0
有一些额外的过滤来处理Intent
。因此,您可能必须以这种方式处理它。您可以尝试在Camera API for 5.0中更改它
部分内容在这里
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
有关详细信息,请参阅Android 5.0 API
更改的文档。
https://developer.android.com/training/camera/photobasics.html#TaskCaptureIntent