Android官方开发文档Training系列课程中文版:分享文件之请求一个共享文件

原文地址:http://android.xsoftlab.net/training/secure-file-sharing/request-file.html

当APP需要访问一个被其它APP所共享的文件时,这个APP通常需要发送一个请求给共享文件的那个APP(服务端),在大多数的情况下,这个请求会启动一个服务端的Activity,这个Activity会展示可以共享的文件。用户可以选择一个文件,稍后服务端APP会将这个文件以URI的形式返回给客户端APP。

这节课展示了客户端APP如何向服务端APP请求一个共享文件,以及从服务端APP接收这个URI,和通过这个URI打开被选中的文件。

发送文件请求

如果要请求服务端的文件,客户端APP需要调用startActivityForResult方法并传入一个Intent对象,这个Intent对象包含了一个行为比如ACTION_PICK以及一个MIME类型,这个类型是指客户端APP可以处理的类型。

举个例子,下面这段代码演示了如何发送一个Intent给服务端APP并启动展示共享文件的那个Activity:

public class MainActivity extends Activity {private Intent mRequestFileIntent;private ParcelFileDescriptor mInputPFD;...@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mRequestFileIntent = new Intent(Intent.ACTION_PICK);mRequestFileIntent.setType("image/jpg");...}...protected void requestFile() {/*** When the user requests a file, send an Intent to the* server app.* files.*/startActivityForResult(mRequestFileIntent, 0);...}...
}

访问请求到的文件

服务端给客户端返回了一个带有文件URI的Intent。这个Intent会从客户端中的onActivityResult()方法返回。一旦客户端有了这个文件的URI,那么它就可以通过FileDescriptor来访问这个文件。

在这个过程中,文件的安全性一直被保留,因为客户端接收到的URI只是数据的一部分。既然这个URI没有包含目录路径,那么客户端APP不可能发现并打开任何服务端上的任何其它文件。只有客户端APP可以访问文件,且仅仅是由服务器APP授予的权限。这个权限是个临时的权限,所以一旦客户端APP的任务终止,那么这个文件就不可被服务端APP之外的地方所访问。

下面这段代码演示了客户端APP如何处理从服务端返回的Intent,以及如何使用URI来获得FileDescriptor对象:

/** When the Activity of the app that hosts files sets a result and calls* finish(), this method is invoked. The returned Intent contains the* content URI of a selected file. The result code indicates if the* selection worked or not.*/@Overridepublic void onActivityResult(int requestCode, int resultCode,Intent returnIntent) {// If the selection didn't workif (resultCode != RESULT_OK) {// Exit without doing anything elsereturn;} else {// Get the file's content URI from the incoming IntentUri returnUri = returnIntent.getData();/** Try to open the file for "read" access using the* returned URI. If the file isn't found, write to the* error log and return.*/try {/** Get the content resolver instance for this context, and use it* to get a ParcelFileDescriptor for the file.*/mInputPFD = getContentResolver().openFileDescriptor(returnUri, "r");} catch (FileNotFoundException e) {e.printStackTrace();Log.e("MainActivity", "File not found.");return;}// Get a regular file descriptor for the fileFileDescriptor fd = mInputPFD.getFileDescriptor();...}}

方法openFileDescriptor()返回了一个文件的ParcelFileDescriptor对象。客户端APP可以根据这个对象得到FileDescriptor对象,这个对象便可以用来读取文件了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 110. 平衡二叉树(二叉树高度)

1. 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7 返回 true 。…

人物志 | 美团技术委员会前端通道主席洪磊:爱折腾的斜杠青年

洪磊,2013年加入美团,目前是美团外卖事业部终端组的负责人,也是美团技术委员会前端通道主席。在加入美团之前,洪磊的职业生涯可以用“跌宕起伏”来形容。他就读于中南财经政法大学,曾任职于雅虎中国,先后担…

论文浅尝 | 可建模语义分层的知识图谱补全方法

本文转载自公众号:PaperWeekly。论文作者:蔡健宇,中国科学技术大学,研究方向:知识图谱近些年,知识图谱(Knowledge Graph)在自然语言处理、问答系统、推荐系统等诸多领域取得了广泛且…

美团背后的商业模式是什么?后疫情时代该走向何方?

文 | King James知乎本文已获作者授权,禁止二次转载2020年的疫情,让10年前的一部剧再次进入人们的视线中,那就是《我的团长我的团》传统社区团购和各大互联网巨头都广发英雄帖招聘社区团购的团长,感觉回到了10年前那场“百团大战”…

Android官方开发文档Training系列课程中文版:分享文件之获取文件信息

原文地址:http://android.xsoftlab.net/training/secure-file-sharing/retrieve-info.html 之前的课程讲述了客户端APP试图与含有文件的URI一同运行,APP可以请求服务端APP的文件信息,包括文件的数据类型以及文件的大小。这些数据类型可以帮助…

LeetCode 783. 二叉搜索树结点最小距离(中序遍历)

1. 题目 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。 示例:输入: root [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点对象(TreeNode object),而不是数组。给定的树 [4,2,6,1,3,null,null] 可表示为下图…

Kubernetes 1.20 版本开始将弃用 Docker,是时候拥抱 Containerd 和 Podman 了!

Kubelet 中对 Docker 支持被弃用,并将在以后的版本中删除。Kubelet 使用一个名为 dockershim 的模块,该模块实现了对Docker的 CRI 支持,在此PR后续版本将删除dockershim。 Kubectl 弃用 --delete-local-data 参数。 名词解释 上面中提到两个名…

开源开放 | OpenKG 更新发布新冠概念、防控和流行病等多个知识图谱

近日,OpenKG 继续更新发布多个新冠知识图谱,其中包括哈尔滨工业大学构建的新冠概念图谱,武汉科技大学与东南大学联合构建的新冠防控图谱。同时,更新了由 IBM 中国研究院构建的流行病学图谱 V1.1。OpenKG 发布的所有新冠知识图谱都…

客户端单周发版下的多分支自动化管理与实践

背景 目前,互联网产品呈现出高频优化迭代的趋势,需求方希望尽早地看到结果,并给予及时反馈,所以技术团队需要用“小步快跑”的姿势来做产品,尽早地交付新版本。基于以上背景,美团客户端研发平台适时地推行了…

无意中发现了一位清华大佬的代码模版

对于刷题相关的文章,在之前我也推荐过不少,今天在给大家推荐一份算法刷题笔记,这份笔记与以往的刷题有所区别,作者把 Leetcode 一千多道题都进行了系统的整理,并且对于每一道题的代码,都要求 beat 100%。作…

Android官方开发文档Training系列课程中文版:通过NFC共享文件之发送文件到另一台设备

原文地址:http://android.xsoftlab.net/training/beam-files/index.html 导言 Android允许你通过Android Beam文件传输特性在两台设备之间传送大文件。这个特性拥有一个简单的API,允许用户通过简单的设备接触来启动一个传输进程。在响应端,…

LeetCode 998. 最大二叉树 II

1. 题目 向最大二叉树插入一个值; 如果该值大于根节点,则子树必须在该值的左边; 如果该值小于根节点,则该值必须在根节点的右子树 2. 解题 class Solution { public:TreeNode* insertIntoMaxTree(TreeNode* root, int val) {if(…

科大讯飞2020完整事件抽取系统(bert+数据集)

科大讯飞2020完整事件抽取系统(bert数据集) 事件抽取将非结构化文本中的事件信息展现为结构化形式,在舆情监测、文本摘要、自 动问答、事理图谱自动构建等领域有着重要应用。在真实新闻中,由于文本中可能存在句式 复杂,主被动转换&#xff0…

应用实践 | 网络智能运维下的知识图谱

本文转载自公众号:网络人工智能园地。让AI更智能,谷歌要用知识图谱让AI像人一样理解世界。让AI更智能,我们要用知识图谱让AI像网络专家一样了解网络。知识图谱引领人工智能从感知阶段演进到认知阶段,成为当前的热点技术之一&#…

还在买白酒?算法工程师们,量化投资了解一下

文 | 阿财知乎 本文已获作者授权,禁止二次转载赚取你认知中的Alpha坚持用量化的观点去看待宇宙的终极问题:买不买,卖不卖。很多人的在互联网这一片方寸之地,表现出来的行为是矛盾的。举个例子,相信技术指标在交易实践毫…

Android官方开发文档Training系列课程中文版:通过NFC共享文件之从其它设备接收文件

原文地址:http://android.xsoftlab.net/training/beam-files/receive-files.html Android Beam文件传输系统会将文件拷贝到接收设备的指定目录中。它还会使用Android媒体扫描器扫描被拷贝的文件,并会将媒体文件的入口信息添加到MediaStore提供者中去。 …

LeetCode 969. 煎饼排序

1. 题目 给定数组 A&#xff0c;我们可以对其进行煎饼翻转&#xff1a;我们选择一些正整数 k < A.length&#xff0c;然后反转 A 的前 k 个元素的顺序。我们要执行零次或多次煎饼翻转&#xff08;按顺序一次接一次地进行&#xff09;以完成对数组 A 的排序。 返回能使 A 排…

论文浅尝 | 用于低资源条件下知识图谱补全的关系对抗网络

论文作者: 邓淑敏&#xff0c;浙江大学在读博士&#xff0c;研究方向为低资源条件下知识图谱自动化构建关键技术研究。Ningyu Zhang, Shumin Deng, Zhanlin Sun, Jiaoyan Chen, Wei Zhang, Huajun Chen. Relation Adversarial Network for Low Resource Knowledge Graph Comple…

数据稀疏、结构复杂,事件抽取面临的挑战该如何应对?

数据稀疏、结构复杂&#xff0c;事件抽取面临的挑战该如何应对&#xff1f;

Spring Boot引起的“堆外内存泄漏”排查及经验总结

背景 为了更好地实现对项目的管理&#xff0c;我们将组内一个项目迁移到MDP框架&#xff08;基于Spring Boot&#xff09;&#xff0c;随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因&#xff0c;发现配置了4G堆内内存&#xff0c;但是实际使用…