当前位置: 首页 > 知识库问答 >
问题:

使用MediaStore拍摄图像。Android系统中的动作_图像_捕捉意图

邵繁
2023-03-14

我使用MediaStore捕捉图像。ACTION_IMAGE_CAPTURE意图。它在大多数设备中工作正常。但它在一些最新的Android设备中工作不正常。

我的意图是使用相机捕捉图像并将其发送到服务器,但不是将该图像存储在设备的默认库中。

**:当我捕获图像时,它会以onActivityResult方法返回其他一些画廊图像,而不是在一些最新的android设备中捕获的图像。我使用下面的代码来捕获和存储图像。

public void launchCamera(View v) {
    Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(camera, CAMERA_PIC_REQUEST );
}

在onActivityResult方法中,

String[] projection = { MediaStore.Images.ImageColumns.SIZE,
                    MediaStore.Images.ImageColumns.DISPLAY_NAME,
                    MediaStore.Images.ImageColumns.DATA, BaseColumns._ID, };
            Cursor c = null;
            Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            try {
                if (u != null) {
                    c = managedQuery(u, projection, null, null, null);
                }
                if ((c != null) && (c.moveToLast())) {
                    Bitmap thumbnail = getBitMapFromLocalPath(c.getString(2), 3);
                    idsImagesgot.add(thumbnail);
                    ContentResolver cr = getContentResolver();
                    cr.delete( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            BaseColumns._ID + "=" + c.getString(3), null);
                }
            } finally {
                if (c != null) {
                    c.close();
                }
            }

有人能在这方面帮我吗?

提前感谢。

萨提斯

共有2个答案

萧奇
2023-03-14

我的onActivityResult()方法如下所示,它用于从MediaStore获取图像。行动_图像_捕获:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap mImageBitmap = (Bitmap) extras.get("data");
    }
}
谭晓博
2023-03-14

ACTION_IMAGE_CAPTURE拍摄的照片不会在所有设备上自动注册到媒体商店。

官方的Android指南给出了这个例子:http://developer.android.com/guide/topics/media/camera.html#intent-接收,但这并不适用于所有设备。

我所知道的唯一可靠的方法是将图片的路径保存在局部变量中。当心你的应用程序在后台运行时(相机应用程序运行时)可能会被杀死,因此你必须在onSaveInstanceState期间保存路径。

评论后编辑:

创建一个临时文件名,在启动意图时将照片存储在该文件名中。

File tempFile = File.createTempFile("my_app", ".jpg");
fileName = tempFile.getAbsolutePath();
Uri uri = Uri.fromFile(tempFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, PICTURE_REQUEST_CODE);

fileName是一个字符串,是您活动的一个字段。你必须这样保存它:

@Override
public void onSaveInstanceState(Bundle bundle)
{
 super.onSaveInstanceState(bundle);
 bundle.putString("fileName", fileName);
}

并在onCreate()中恢复:

public void onCreate(Bundle savedInstanceState)
{
 if (savedInstanceState != null)
  fileName = savedInstanceState.getString("fileName");
 // ...
}

现在,在onActivityResult时,您知道存储照片的文件名(fileName)。你可以用它做任何你想做的事情,然后删除它。

2013年9月19日编辑:似乎有些相机应用忽略了putExtra uri,而将图片存储在另一个地方。因此,在使用fileName的值之前,应该检查意图是否为null。如果你得到一个非空的意图,那么你应该选择intent。getData()overfileName。仅在需要时才将fileName用作备份解决方案。

 类似资料:
  • 拍摄图像或影像 安装PSP™专用的摄影机(选购品)后,可拍摄静止图像或影像。拍摄后的静止图像或影像会被保存至Memory Stick™或主机内存中。使用PSP™摄影机机能时,请遵守一般礼仪适切使用。 提示 拍摄的图像会被保存至Memory Stick™或主机内存中。 初期设定的保存位置为主机内存。若要变更为Memory Stick™,请在操作接口选择(设定)>[保存位置]。   准备 1. 将摄影

  • 问题内容: 我环顾四周,但似乎并没有解决这个非常恼人的问题的可靠答案。 我以纵向拍摄照片,然后单击“保存/放弃”,按钮也以正确的方向放置。问题是当我随后在横向上检索图像时(图像已逆时针旋转90度) 我不想强迫用户以特定方向使用相机。 有没有办法检测照片是否以人像模式拍摄,然后解码位图并将其向上翻转? 问题答案: 照片始终以相机内置在设备中的方向拍摄。为了使图像正确旋转,您必须读取存储在图片中的方向

  • 本文向大家介绍树莓派动作捕捉抓拍存储图像脚本,包括了树莓派动作捕捉抓拍存储图像脚本的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了树莓派动作捕捉抓拍存储图像的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 更新:这看起来和这个有关:来自Android camera2 API的图像数据在Galaxy S5上翻转和压扁--我认为这是一个bug,因为Nexus 5/6工作正常,它没有任何意义,需要获得完整的传感器大小,然后手动裁剪达到所需的纵横比,不如不使用“支持的”输出大小以及! 问题: > 使用Camera2 API获取相机的特性,并提取适合MediaCodeC.Class的输出大小 使用合适的相机输

  • 有没有一种方法可以检测照片是否是在人像模式下拍摄的,然后解码位图,并将其按正确的方式向上翻转?

  • 所以我遇到了一个问题,前面在我提问的问题中提到过:将图像(ACTION_image_CAPTURE)上载到Firebase存储 我对这个问题进行了更多的搜索,并应用了Android Studio文档:https://developer.android.com/training/camera/photobasics.html#TaskPhotoView 所以,在您阅读代码之前,我基本上想说一下需要什