ACTION_IMAGE_CAPTURE 不适用于 Android 4.2.2
ACTION_IMAGE_CAPTURE not working for Android 4.2.2
我正在开发一个需要拍照并保存并在应用程序中显示的应用程序。它适用于 Android 4.0,但不适用于 Android 4.2.2(我猜也适用于更高版本)。
代码如下:
Button photoBtn = (Button) inflated.findViewById(R.id.btn_photo);
photoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String fileStorageFolder = Environment.getExternalStorageDirectory() + File.separator + "MobiAgenda";
File file = new File(fileStorageFolder + File.separator + "Contact" + id + ".jpg");
Uri imgUri = Uri.fromFile(file);
imgPath = file.getAbsolutePath();
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
float scale = getApplicationContext().getResources().getDisplayMetrics().density;
Bitmap thumb = getThumbnailBitmap(imgPath, Math.round(100*scale));
try
{
FileOutputStream out = new FileOutputStream(imgPath);
thumb.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
}
catch (Exception e)
{
System.err.println(e.toString());
}
takenPhoto.setImageBitmap(thumb);
takenPhoto.setVisibility(View.VISIBLE);
}
}
好吧,正如我之前所说,这段代码适用于我的 HTC Desire C。但我已经在两个不同的 phones 运行 Android 4.2.2 和这些是我得到的行为:
-Droxio B51:意图打开相机。按下取消按钮,回调 onActivityResult,result_code = 0(应用程序什么都不做 --> 确定)。但是当在相机界面按下接受按钮时,照片保存在phone(与通过EXTRA_OUTPUT给出的路径不同),但它不会回调onActivityResult。
-Sony Xperia L:意图打开相机。拍照后,没有取消或接受的选项(所以我猜是接受它),但它调用 onActivityResult 并设置 result_code = 0,所以应用程序什么都不做。在这种情况下,图片没有保存在 phone 的任何路径中(或者至少我找不到它)。
为什么我有这两种不同的行为?最重要的是,我该如何解决它们?
谢谢。
Why I'm having this two different behaviours?
ACTION_IMAGE_CAPTURE
正在调用第三方应用拍照。有数以千计的相机应用程序,既有预装的,也有用户从 Play 商店等地方安装的。 None 必须支持 ACTION_IMAGE_CAPTURE
,而那些支持的可能会有错误,正如您遇到的那样。
how can I solve them?
停止使用ACTION_IMAGE_CAPTURE
,在自己的应用中自己拍照。您无法强迫开发人员编写能够正确处理 ACTION_IMAGE_CAPTURE
的相机应用程序,也无法强迫用户使用能够正确处理 ACTION_IMAGE_CAPTURE
的相机应用程序。
我正在开发一个需要拍照并保存并在应用程序中显示的应用程序。它适用于 Android 4.0,但不适用于 Android 4.2.2(我猜也适用于更高版本)。
代码如下:
Button photoBtn = (Button) inflated.findViewById(R.id.btn_photo);
photoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String fileStorageFolder = Environment.getExternalStorageDirectory() + File.separator + "MobiAgenda";
File file = new File(fileStorageFolder + File.separator + "Contact" + id + ".jpg");
Uri imgUri = Uri.fromFile(file);
imgPath = file.getAbsolutePath();
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
float scale = getApplicationContext().getResources().getDisplayMetrics().density;
Bitmap thumb = getThumbnailBitmap(imgPath, Math.round(100*scale));
try
{
FileOutputStream out = new FileOutputStream(imgPath);
thumb.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
}
catch (Exception e)
{
System.err.println(e.toString());
}
takenPhoto.setImageBitmap(thumb);
takenPhoto.setVisibility(View.VISIBLE);
}
}
好吧,正如我之前所说,这段代码适用于我的 HTC Desire C。但我已经在两个不同的 phones 运行 Android 4.2.2 和这些是我得到的行为:
-Droxio B51:意图打开相机。按下取消按钮,回调 onActivityResult,result_code = 0(应用程序什么都不做 --> 确定)。但是当在相机界面按下接受按钮时,照片保存在phone(与通过EXTRA_OUTPUT给出的路径不同),但它不会回调onActivityResult。
-Sony Xperia L:意图打开相机。拍照后,没有取消或接受的选项(所以我猜是接受它),但它调用 onActivityResult 并设置 result_code = 0,所以应用程序什么都不做。在这种情况下,图片没有保存在 phone 的任何路径中(或者至少我找不到它)。
为什么我有这两种不同的行为?最重要的是,我该如何解决它们?
谢谢。
Why I'm having this two different behaviours?
ACTION_IMAGE_CAPTURE
正在调用第三方应用拍照。有数以千计的相机应用程序,既有预装的,也有用户从 Play 商店等地方安装的。 None 必须支持 ACTION_IMAGE_CAPTURE
,而那些支持的可能会有错误,正如您遇到的那样。
how can I solve them?
停止使用ACTION_IMAGE_CAPTURE
,在自己的应用中自己拍照。您无法强迫开发人员编写能够正确处理 ACTION_IMAGE_CAPTURE
的相机应用程序,也无法强迫用户使用能够正确处理 ACTION_IMAGE_CAPTURE
的相机应用程序。