欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

适配小米华为手机等拍照后获取不到照片

程序员文章站 2022-03-21 17:13:35
普通的相机调用,在 intent 传进去一个路径,然调用这个意图。 在测试机 荣耀 8X 上是没有问题的,能获取到拍的照片。 在小米系统和 华为麦芒4上就不行,路径上就没有照片。 ......

问题摘要:适配小米华为手机等拍照后获取不到照片

出现场景

普通的相机调用,在 intent 传进去一个路径,然调用这个意图。

在测试机 荣耀 8x 上是没有问题的,能获取到拍的照片。

在小米系统和 华为麦芒4上就不行,路径上就没有照片。

   /**
     * @param file 拍照生成的照片地址
     * @return intent
     */
    public static intent gettakepictureintent(file file) {
        intent intent = new intent(mediastore.action_image_capture);
        if (intent.resolveactivity(commonutils.context.getpackagemanager()) != null) {
            if (null != file) {
                temppicturepath = file.getpath();
                logutil.log(dautils.class.getsimplename(),"gettakepictureintent  :->>"+temppicturepath);
                if (build.version.sdk_int < build.version_codes.n) {
                    intent.putextra(mediastore.extra_output, uri.fromfile(file));
                } else {
                    contentvalues contentvalues = new contentvalues(1);
                    contentvalues.put(mediastore.images.media.data, file.getabsolutepath());
//                    uri uri = commonutils.context.getcontentresolver().insert(mediastore.images.media.external_content_uri, contentvalues);
                    uri uri = fileprovider.geturiforfile(commonutils.context, "xxx.fileprovider", file.getabsolutefile());
                    intent.putextra(mediastore.extra_output, uri);
                }
               
            }
        }
        return intent;
    }

出现原因

不能获取到照片的原因是因为这个照片的目录没有创建。

在传入 uri 之前要把照片的目录给创建出来。不然就拿不到照片。

如何修复

修改如下:在传入照片 uri 前保证目录已经被创建

   /**
     * @param file 拍照生成的照片地址
     * @return intent
     */
    public static intent gettakepictureintent(file file) {
        intent intent = new intent(mediastore.action_image_capture);
        if (intent.resolveactivity(commonutils.context.getpackagemanager()) != null) {
            if (null != file) {
             if (!file.getparentfile().exists()){
                    file.getparentfile().mkdirs();
                }
                temppicturepath = file.getpath();
                logutil.log(dautils.class.getsimplename(),"gettakepictureintent  :->>"+temppicturepath);
                if (build.version.sdk_int < build.version_codes.n) {
                    intent.putextra(mediastore.extra_output, uri.fromfile(file));
                } else {
                    contentvalues contentvalues = new contentvalues(1);
                    contentvalues.put(mediastore.images.media.data, file.getabsolutepath());
//                    uri uri = commonutils.context.getcontentresolver().insert(mediastore.images.media.external_content_uri, contentvalues);
                    uri uri = fileprovider.geturiforfile(commonutils.context, "xxx.fileprovider", file.getabsolutefile());
                    intent.putextra(mediastore.extra_output, uri);
                }
               
            }
        }
        return intent;
    }

排查过程

反复 debug 断点,google 半小时无果后,灵光一闪,想到了。

总结

这是个坑

end