【问题标题】:Android Camera Image NameAndroid 相机图像名称
【发布时间】:2017-10-13 19:40:12
【问题描述】:

我正在尝试构建一个捕获图像的简单应用程序。在 Android M 之前,我已经成功实现了该应用程序。我在 Android N 上遇到了 FileUriExposedException,但后来我可以借助建议此代码的 link 解决它 `

capture_image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if(camera_intent.resolveActivity(getPackageManager())!=null){
                    ContentValues values = new ContentValues(1);
                    values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpg");
                    fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
                    camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
                    camera_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | 
                                           Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                    startActivityForResult(camera_intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
                }
                else {
                    Toast.makeText(Visitor_Details.this,"ERROR",Toast.LENGTH_LONG).show();
                }
            }
        });

`

这段代码用一个随机的 13 位整数作为图像名称将图像存储在图片文件夹中,例如:- 1507922385727.jpg。我尝试通过 Log.d() 读取 fileUri,但 Log 返回的值和图像名称不同。这个图像名称是如何生成的?如何存储此图像名称,以便我可以通过意图传递它以在下一个 Activity 中显示图像?最后,我如何在图片中创建一个子文件夹,我可以在其中引导这些图像? PS :- 以前,我使用 SimpleDateFormat 获取时间戳作为我的图像名称,并使用 File 类创建了文件夹。getImageName() 只返回时间戳值。这是我用于以前版本的 Android 的代码。 `

btnCapture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {



                Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                File imageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"Camera Test");
                String imageName = getImageName();
                File imagePath = new File(imageDir,imageName);
                Uri imageUri = Uri.fromFile(imagePath);
                camIntent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
                startActivityForResult(camIntent,1);

            }

`

【问题讨论】:

    标签: android image camera storage


    【解决方案1】:

    这个图像名称是如何生成的?

    这取决于MediaStore。使用您的原始代码,但使用FileProvider 提供对文件位置的访问权限并获取您的Uri。请参阅this sample app 了解如何将FileProviderACTION_IMAGE_CAPTURE 一起使用。

    【讨论】:

    • 谢谢。相机工作。除了现在,我得到了 IllegalArgumentException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2012-12-20
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多