android 小米相册无法获取,适配小米华为手机等拍照后获取不到照片

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

出现场景

普通的相机调用,在 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值