gpt4 book ai didi

Android ACTION_IMAGE_CAPTURE Intent

转载 作者:IT老高 更新时间:2023-10-28 12:55:33 24 4
gpt4 key购买 nike

我们正在尝试使用原生相机应用让用户拍摄一张新照片。如果我们省略 EXTRA_OUTPUT extra 并返回小的位图图像,它就可以正常工作。但是,如果我们在启动前对 Intent 进行 putExtra(EXTRA_OUTPUT,...) ,则一切正常,直到您尝试点击相机应用程序中的“确定”按钮。 “确定”按钮什么也不做。相机应用程序保持打开状态,没有任何锁定。我们可以取消它,但文件永远不会被写入。我们究竟需要做什么才能让 ACTION_IMAGE_CAPTURE 将拍摄的图片写入文件?

编辑:这是通过 MediaStore.ACTION_IMAGE_CAPTURE Intent 完成的,只是为了清楚

最佳答案

这是 well documented bug在某些版本的安卓中。也就是说,在 android 的 google 体验版本中,图像捕获不能像记录的那样工作。我通常在实用程序类中使用类似的东西。

public boolean hasImageCaptureBug() {

// list of known devices that have the bug
ArrayList<String> devices = new ArrayList<String>();
devices.add("android-devphone1/dream_devphone/dream");
devices.add("generic/sdk/generic");
devices.add("vodafone/vfpioneer/sapphire");
devices.add("tmobile/kila/dream");
devices.add("verizon/voles/sholes");
devices.add("google_ion/google_ion/sapphire");

return devices.contains(android.os.Build.BRAND + "/" + android.os.Build.PRODUCT + "/"
+ android.os.Build.DEVICE);

}

然后当我启动图像捕获时,我会创建一个检查错误的 Intent 。

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
if (hasImageCaptureBug()) {
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/tmp")));
} else {
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}
startActivityForResult(i, mRequestCode);

然后在我返回的 Activity 中,我会根据设备做不同的事情。

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (requestCode) {
case GlobalConstants.IMAGE_CAPTURE:
Uri u;
if (hasImageCaptureBug()) {
File fi = new File("/sdcard/tmp");
try {
u = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null));
if (!fi.delete()) {
Log.i("logMarker", "Failed to delete " + fi);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
u = intent.getData();
}
}

这让您不必编写新的相机应用程序,但这段代码也不是很好。最大的问题是

  1. 您永远不会从有 bug 的设备。你得到512px 宽的图片被插入到图像内容中提供者。在没有错误,一切都像文件一样工作,你会得到一张正常的大图。

  2. 您必须维护该列表。作为写,它是可能的设备用一个版本闪烁修复了该错误的android(例如cyanogenmod'sbuilds)。如果发生这种情况,您的代码将碰撞。解决方法是使用整个设备指纹。

关于Android ACTION_IMAGE_CAPTURE Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com