gpt4 book ai didi

Android:从相机获取图片 - 小心

转载 作者:行者123 更新时间:2023-11-29 15:22:14 31 4
gpt4 key购买 nike

最近我编写了一个 Android 应用程序,它需要从内置相机拍摄照片并将其取回我的应用程序。我使用了众多教程中的一个,一切正常。但后来我在不同的设备上测试了它,但没有任何效果。似乎有问题,那么我如何确保我可以在每台设备上拍照? (看我的回答,这更像是一个教程)

最佳答案

我使用了众多教程中的一个,一切正常。但后来我在不同的设备上测试了它,但没有任何效果。起初我很惊讶,但后来我决定深入探讨这个话题。我意识到很多这样的教程会导致一个大问题。所以我决定与您分享我的经验。

让我从大多数教程使用的通用方法开始。

首先你选择一个像这样的requestID:

private static final int CAMERA_PIC_REQUEST = 1337;

然后你创建一个Intent并启动相机Activity

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

要取回图片,您可以使用 onActivityResult 函数并从接收到的 Intent 数据中读取图片

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK && data != null) {
// do something like
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
}
}

看起来不错吧?很好,但现在是棘手的部分。

如 android 文档中所写, Intent 数据只会返回一个 sacled down 或者可以说是拍摄照片的小版本,而某些设备根本不会返回任何东西!甚至可能发生数据不为空但您收到“传递结果 ResultInfo 失败”异常的情况。

那现在呢?解决方案非常简单。你只需告诉相机将图片保存到 SD 卡并返回一个 URI 到这个文件。下面,我将向您展示上面编辑的代码。

我们创建一个静态请求 ID 一个 URI

private static final int CAMERA_PIC_REQUEST = 1337;
private static Uri outputFileUri;

我们创建了相机 Activity ,但这次我们传递了一个额外的参数(我们的 URI)

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

现在我们使用与上面相同的方法来处理图像,但我们使用我们的 URI 而不是使用 Intent 数据

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
// do something to get the bitmap from the uri for example
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), outputFileUri);
}

使用此解决方案,您可以确保在每台设备上都能获得照片。但是要小心,因为您得到的是全尺寸位图,可能需要缩小位图以避免内存不足错误。如果您不想将照片保存在用户的 SD 卡上,只需删除该文件即可。

感谢阅读!

关于Android:从相机获取图片 - 小心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303937/

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