使用 takephoto_library 踩得坑

我在项目中使用了 compile ‘com.jph.takephoto:takephoto_library:4.0.3’ 这个依赖 也是最新的依赖,然后我要做版本升级,就是下载好新的apk的时候去跳转安装,为啦适配7.0以上的机型做了如下的操作

对于7.0以上的 我们要先共享某个文件夹,才能使用里面的文件,

这里写图片描述

file_paths的内容如下

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <paths>
        <!--name 是起的别名(随便起)   path是要共享的文件夹 MeangerNew-->
        <external-path
            name="files_root"
            path="Android/data/我的包名/" />

        <external-path
            name="external_storage_root"
            path="." />

    </paths>

</resources>

在清单文件中加入代码


//这里本来应该是  android:name="android.support.v4.content.FileProvider" 稍后解释
 <provider
          android:name="android.support.v4.content.FileProvider"
            android:authorities="我的包名.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="name,authorities,exported,grantUriPermissions">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"
                tools:replace="name,resource" />
        </provider>
  Intent intent=new Intent(Intent.ACTION_VIEW);

        if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N) {
        //file  就是下载好的apk安装包
            Uri contentUri = FileProvider.getUriForFile(this,"我的包名.fileProvider",file);

            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

            intent.setDataAndType(contentUri,"application/vnd.android.package-archive");

        }else{

            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");

        }
        //跳转到安装的界面
         this.startActivity(intent);

此时运行代码 发现报错如下

这里写图片描述

根据提示在上面节点中 加入这句话
本来加入到了 application的节点下 但是发现,又会报如下错误

这里写图片描述

不知如何解决了 最后吧这句话加入到了provider的节点下,编译通过,不报错了
并且下载好的安装包也能跳转到安装界面了,但是会发现 这个头像的功能就不能使用了,原因好像是这句话 tools:replace=”name,authorities,exported,grantUriPermissions”,意思就是 替换成了自己的共享目录,所以导致了头像功能失效,于是陷入了 更新不能用头像 用头像不恩能够更新的地步,最后百度了好久终于 找到了解决方案;

先是下载了takephoto_library的源码找到了原因
我发现takephoto_library中也使用了这样的注册信息
这里写图片描述

//takephoto_library中的清单文件信息
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jph.takephoto" >
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <application
        android:allowBackup="true">
        <activity android:name="com.soundcloud.android.crop.CropImageActivity" />
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
    </application>
</manifest>





文件信息代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <root-path path="" name="camera_photos" />
    </paths>
</resources>

即使我吧自己的文件名字改成和他不一样的 也依然会报错,因为主要原因不是因为 文件名冲突,而是清单文件中的
android:name=”android.support.v4.content.FileProvider”这一句话冲突
于是我在自己项目中继承了android.support.v4.content.FileProvider 未做任何的处理 改为自己的类
这里写图片描述

将自己的清单文件中的注册 改为如下

<provider
            android:name="包路径.MyFileProvider"
            android:authorities="我的包名.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="name,authorities,exported,grantUriPermissions">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"
                tools:replace="name,resource" />
        </provider>

让后编译 运行 完美解决

本篇仅供个人参考 没时间写,写的乱七八糟的,自己记录一下,而已 如果你发现 takephoto_library还和其他的 三方冲突,请参考这篇代码,

http://blog.csdn.net/liuyu0915/article/details/72621905

希望这篇乱糟糟的文章能够帮到你!!!我这是个人做笔记,见谅

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章