请选择 进入手机版 | 继续访问电脑版

好神码

 找回密码
 立即注册

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 1846|回复: 20

安卓在Manifest注册FileProvider导致应用闪退

[复制链接]

1

主题

11

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2019-12-11 14:10:56 | 显示全部楼层 |阅读模式
不是专业搞安卓的,项目需要硬着头皮做,现在遇到个问题,我要调用手机相机获取图片,得知Uri不能被暴露,就在Manifest清单里注册了FileProvider
  1.   
  2.             
  3.         
复制代码
,但是这样的话应用会闪退,并且报错 Didn't find class "androidx.core.content.FileProvider" on path:xxx
于是我就给注释掉了,这样一来虽然可以进入应用,但是使用相机的时候又出错了

  1.   Uri uri = null;
  2.                 File file=new File(path);
  3.                 String authority=this.getPackageName() + ".fileProvider";
  4.                 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  5.                     uri = FileProvider.getUriForFile(this, authority, file);
  6.                     openCameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  7.                 }else {
  8.                     uri = Uri.fromFile(file);
  9.                 }
复制代码

FileProvider.getUriForFile这一句一直报错   Failed resolution of: Landroidx/core/content/FileProvider;
百度查了很长时间没有找到有效的解决方法,只能请大神帮忙了,积分不多全部奉上,没怎么用过论坛的这个编辑,可能排版有点问题,还请见谅
回复

使用道具 举报

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2019-12-11 14:54:23 | 显示全部楼层
写在if里面
回复

使用道具 举报

1

主题

11

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2019-12-11 15:12:23 | 显示全部楼层
引用 1 楼 fjbui 的回复:写在if里面
现在就是写在if里面的啊....
回复

使用道具 举报

1

主题

11

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2019-12-11 15:45:28 | 显示全部楼层
你手机什么型号,代码就没东西应该没问题,你动态的添加存储和相机访问权限
回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2019-12-11 15:53:07 | 显示全部楼层
引用 3 楼 шесай-ай-ай-ай-ай, ч 的回复:你手机什么型号,代码就没东西应该没问题,你动态的添加存储和相机访问权限

手机是一加五 OnePlusA5000
这一块代码我放上来吧

  1.   if (mType.equals("takePhoto")) {
  2.                 Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  3.                 openCameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  4.                 Uri uri = null;
  5.                 File file=new File(path);
  6.                 String authority=this.getPackageName() + ".fileProvider";
  7.                 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  8.                     uri = FileProvider.getUriForFile(this, authority, file);
  9.                     openCameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  10.                 }else {
  11.                     uri = Uri.fromFile(file);
  12.                 }
  13. //                Uri uri= FileProvider.getUriForFile(this, authority, file);
  14.                 openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
  15.                 startActivityForResult(openCameraIntent, PHOTOHRAPH);
  16.             }
复制代码
回复

使用道具 举报

1

主题

11

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2019-12-11 16:25:17 | 显示全部楼层
确认下你的项目是否依赖的androidX
回复

使用道具 举报

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2019-12-11 17:04:29 | 显示全部楼层
引用 5 楼 aaa_Ye 的回复:确认下你的项目是否依赖的androidX

是用的androidX
回复

使用道具 举报

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2019-12-11 17:15:40 | 显示全部楼层

   
  //如果  文件夹不存在 会出现拍照无法返回
            // 如果文件路径错了 会报错
            File file = new File(Environment.getExternalStorageDirectory() + File.separator + "testimages"+ File.separator + fileName);
            if(!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            mPhotoPath = file.getAbsolutePath();
            Uri fileUri = FileProvider.getUriForFile(this, "com.providerdemo.fileprovider", file);
回复

使用道具 举报

1

主题

11

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2019-12-11 17:16:44 | 显示全部楼层
https://blog.csdn.net/yyo201/article/details/80744100
回复

使用道具 举报

1

主题

11

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2019-12-12 09:33:26 | 显示全部楼层
引用 7 楼 旅行蜗牛 的回复:
   
  //如果  文件夹不存在 会出现拍照无法返回
            // 如果文件路径错了 会报错
            File file = new File(Environment.getExternalStorageDirectory() + File.separator + "testimages"+ File.separator + fileName);
            if(!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            mPhotoPath = file.getAbsolutePath();
            Uri fileUri = FileProvider.getUriForFile(this, "com.providerdemo.fileprovider", file);

试过了, 还是这行
  1. Uri fileUri = FileProvider.getUriForFile(this, "cn.uflycn.com.providerdemo.fileprovider", file);
复制代码
报错
Failed resolution of: Landroidx/core/content/FileProvider;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|好神码 ( 粤ICP备18029814号-1 )

GMT+8, 2021-12-7 17:59 , Processed in 0.097569 second(s), 4 queries , File On.

Powered by haoshenma V1.0

© 2018-2048 haoshenma

快速回复 返回顶部 返回列表