您好,今天小然来为大家解答以上的问题。android加壳 github相信很多小伙伴还不知道,现在让我们一起来看看吧!

android加壳 github android加壳第二代android加壳 github android加壳第二代


android加壳 github android加壳第二代


1、GitHub 项目地址:Share2在之前的一篇文章 利用 Android 系统原生 API 实现分享功能 中主要说了下实现流程,但具体实施起来其实还是有许多坑要面对。

2、那这篇文章就是提供一个封装好的 Share2 库供大家参考。

3、更多相关内容请参考上一篇,这里就不再重复赘述了。

4、知道大致的实现流程后,其实只要解决下面几个问题后就可以具体实施了。

5、这其实是直接决定了最终的实现形态,我们知道常见的使用场景中,只是为了在应用间分享和一些文件,那对于那些只是分享文本的产品而言,两者实现起来要考虑的问题完全不同。

6、所以为了解决这个问题,我们可以预先定好支持的分享内容类型,针对不同类型可以进行不同的处理。

7、在 Share2 中,一共定义了5种类别的分享内容,基本能覆盖常见的使用场景。

8、在调用分享接口时可以直接指定内容类型,比如像文本、、音视频、已经其他各种类型文件。

9、对于不同类别的内容,可能会有不同的来源。

10、比如文本可能就只是一个字符串对象,而对于分享或其他文件,我们需要一个 Uri 来标识一个资源。

11、这其实就引出来具体实施时的一个大问题,如何获取要分享文件的 Uri,并且这个 Uri 要能被接收分享内容的应用处理才行 。

12、那么,如何获取要分享内容文件的 Uri?如果处理才能让接收方也能够根据 Uri 获取到文件?我们把文件 Uri 的来源划分为下面三种类型:通过这种方式获取到的 Uri 是由系统 ContentProvider 返回的,在 Android 4.4 之前的版本和之后的版本有较大的区别,我们后面再说怎么处理。

13、只要先记住这种系统返回给我们的 Uri 就行了。

14、比如调用系统相机进行拍照或录制音视频,要传入一个生成目标文件的 Uri ,从 7.0 开始我们需要用到 FileProvider 来实现。

15、如果用到了 FileProvider 就要注意跟系统 ContentProvider 返回 Uri 的区别,比如我们在 Manifest 中对 FileProvider 配置 android:authorities="com.xx.xxx.fileProvider" 属性,那这时系统返回的 Uri 格式就变成了 : content://com.xx.xxx.fileProvider... ,对于这种类型的 Uri 我们姑且叫 自定义 FileProvider 返回的 Uri ,后面一并说怎么处理。

16、我们调用 new File 时需要传入指定的文件路径,这个路径通常是: /storage/emulated/0/... 这种样式,我们要想调用分享时也要变成 Uri 的形式才可以,那么如何把文件路径变成一个文件 Uri ?这个问题下面也一并进行回答。

17、前面提到了文件 Uri 的三种分类,对应不同类型处理方式也不同,不然你遇到的问题就是:这是由于对系统返回的 Uri 缺失访问权限导致,所以要对应用进行临时访问 Uri 的授权才行,不然会提示权限缺失。

18、对于要分享系统返回的 Uri 我们可以这样进行处理:需要注意的是对于自定义 FGithub: ileProvider 返回 Uri 的处理,即使是设置临时访问权限,但是分享到第三方应用也会无法识别该 Uri典型的场景就是,我们如果把自定义 FileProvider 的返回的 Uri 设置分享到微信或 QQ 之类的第三方应用,会提示文件不存在,这是因为他们无法识别该 Uri。

19、关于这个问题的处理其实跟下面要说的把文件路径变成系统返回的 Uri 一样,我们只需要把自定义 FileProvider 返回的 Uri 变成第三方应用可以识别系统返回的 Uri 就行了。

20、创建 FileProvider 时需要传入一个 File 对象,所以直接可以知道文件路径,那就把问题都转换成了: 如何通过文件路径获取系统返回的 Uri下面是根据传入的 File 对象和类型来查询系统 ContentProvider 来获取相应的 Uri,已经按照不同文件类型在不同系统版本下的进行了适配。

21、其中 forceGetFileUri 方法是通过反射实现的,处理 7.0 以上系统的特殊情况下的兼容性,一般情况下不会调用到。

22、Android 7.0 开始不允许 file:// Uri 的方式在不同的 App 间共享文件,但是如果换成 FileProvider 的方式依然是无效的,我们可以通过反射把该检测干掉。

23、通过 File Path 转成 Uri 的方式,我们最终统一了调用系统分享时传入内容 Uri 的三种不同场景,最终全部转换为传递系统返回的 Uri,让第三方应用能够正常的获取到分享内容。

24、Share2 按照上述方法进行了具体实施,可以通过下面的方式进行集成:分享到指定界面,比如分享到微信朋友圈。

本文到这结束,希望上面文章对大家有所帮助。