专栏首页子勰随笔再看Android官方文档之分享

再看Android官方文档之分享

分享简单数据

发送

  • intent调用了Intent.createChooser(),那么Android总是会显示可供选择。 Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to));
  • 分享二进制的数据需要结合设置特定的MIME类型,需要在EXTRA_STREAM里面放置数据的URI
  • 我们可以使用*/*这样的方式来指定MIME类型,但是这仅仅会match到那些能够处理一般数据类型的Activity
  • 接收的程序需要有访问URI资源的权限,可以将数据存储在ContentProvider中或者使用MediaStore系统。

接收

  • 由于无法知道其他程序发送过来的数据内容是文本还是其他类型的数据,若数据量巨大,则需要大量处理时间,因此我们应避免在UI线程里面去处理那些获取到的数据。

分享文件

  • Android的FileProvider组件提供了getUriForFile()方法创建一个文件的content URI。

建立文件分享

  1. 指定FileProvider
    • android:authorities字段指定了希望使用的Authority,该Authority针对于FileProvider所生成的content URI
    • <provider>下的<meta-data>指向了一个XML文件,该文件指定了我们希望共享的目录路径
  • 指定可共享目录路径 <paths> <files-path path="images/" name="myimages" /> </paths>
    • “name”属性字段告知FileProvider在“files/images/”子目录中的文件的Content URI添加路径分段(path segment)标记:“myimages”。
    • <files-path>标签共享的是在我们应用的内部存储中“files/”目录下的目录
    • <external-path>标签共享的是位于外部存储的目录
    • Content URI将会包含下列信息:
      • 标签中指定的Authority(“com.example.myapp.fileprovider”);
      • 路径“myimages/”;
      • 文件的名字。
      • 事例: content://com.example.myapp.fileprovider/myimages/default_image.jpg

分享文件

  • 调用setFlags()来为文件授予临时被访问权限是唯一的安全的方法。尽量避免对文件的Content URI调用Context.grantUriPermission(),因为通过该方法授予的权限,只能通过调用Context.revokeUriPermission()来撤销。

请求分享文件

  • 因为客户端应用程序所收到的所有数据只有文件的Content URI而已。由于URI不包含目录路径信息,客户端应用程序无法查询或打开任何服务端应用程序的其他文件。
  • openFileDescriptor()方法返回一个文件的ParcelFileDescriptor对象。客户端应用程序从该对象中获取FileDescriptor对象,然后利用该对象读取这个文件了

PS,文件分享这部分内容好多都忘了,这里先停一下,做点东西实践一下

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android签名校验机制(数字证书)

    子勰
  • Android开发调试常用工具

    子勰
  • 再看Android官方文档之ActionBar和兼容性

    子勰
  • 将Spring Boot作为守护进程启动的一种简单的方法

    我有一个SpringBoot应用,通过shell脚本start.sh启动。现在我期望通过守护进程的方式启动这个应用,这样我即使关掉终端,该应用也能继续运行。

    Jerry Wang
  • 如何实现对上下文(Context)数据的统一管理 [提供源代码下载]

    在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息;或者基于当前方法...

    蒋金楠
  • Python实现聊天机器人

    AIML全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由R...

    海天一树
  • Java集合---ArrayList(2)

    用途与特点 可用于在需要存储有序的,可动态扩充集合大小的情况使用。可以看做是一个动态的数组。虽然该集合理论上是可以动态无限扩充,但也有最大长度限制。

    兜兜毛毛
  • Redis数据库云端最佳技术实践

    邹鹏,腾讯高级工程师,腾讯云数据库Redis负责人,多年数据库、网络安全研发经验。在网络、计算、存储、安全等领域有深入的研究和丰富的产品化经验。 在Redis、...

    腾讯云数据库 TencentDB
  • 手动实现Android热修复

    周一发布了新版本,当天晚上用户就为app未测试到的bug发飙了,恩,很快就找到了问题所在,一个容易疏忽的空指针。虽然只是一个小小的bug但是不修复是很影响用户体...

    用户1269200
  • 35. Search Insert Position

    Given a sorted array and a target value, return the index if the target is found...

    luozhiyun

扫码关注云+社区

领取腾讯云代金券