Android官方开发文档Training系列课程中文版:分享简单数据之发送简单数据给其它APP

原文地址:http://android.xsoftlab.net/training/building-content-sharing.html

引言

Android应用程序有一项伟大的事情就是它们有可以与其它应用程序交流及整合。为什么不重新使用已经存在于其它APP中的非核心功能呢?

这节课覆盖了一些共同的方式,你可以使用这些方式在两个程序之间使用IntentAPI以及ActionProvider对象发送和接收一些简单的数据。

发送简单的数据给其它APP

当在构造Intent时,必须指定intent要触发的功能。Android定义了包括ACTION_SEND在内的若干功能。你可以猜到,ACTION_SEND表明这个intent可以发送数据从一个activity到另一个activity,甚至是跨进程。如果要发送数据到另一个activity,你需要做的就是指定数据与类型,系统会识别适合接收的activity列表并展示给用户选择,如果有多个的话,或者立即启动activity。相似的,你可以公布你的activity支持接收的数据类型。

在两个应用之间发送接收数据在社会化分享中非常常见。Intent使用户可以更快捷更方便的使用他们喜欢的应用分享信息。

Note:在ActionBar上添加分享按钮的最好方式是使用ShareActionProvider,ShareActionProvider从API 14开始可用。我们会在课程Adding an Easy Share Action中讨论ShareActionProvider。

发送文本内容

上图:在手持设备上ACTION_SEND意图选择器的对话框。

ACTION_SEND的大多数功能是发送文本从一个activity到另一个activity。举个例子,系统内置的浏览器可以将当前页面的URL作为文本分享给任何程序。这对通过email或者社交网络分享一篇文章或者一个网站给朋友来说是非常有用的。这里的代码实现了这种类型的分享:

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(sendIntent);

如果有应用程序的过滤器可以匹配到ACTION_SEND以及MIME类型text/plain,那么Android系统会运行它;如果有多个应用程序匹配到,系统会展示一个选择对话框,来允许用户选在一个APP。

然而,如果你调用的是Intent.createChooser(),那么它返回的Intent版本将总是会展示一个选择器对话框。这里是它的一些优势:

  • 虽然用户原先已经选择过这个Intent的默认应用,但是对话框还是需要每次都出现。
  • 如果没有程序匹配到,那么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)));

它的结果会向上图显示的那样。

你可以给Intent设置一些附加标准:EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC, EXTRA_SUBJECT。如果接收的应用程序不是被设计为使用它们的话,程序会忽略这些附加标准。

Note:一些e-mail的应用程序,比如Gmail,会期望接收附加的字符串数组,类似EXTRA_EMAIL和EXTRA_CC,使用putExtra(String, String[])方法来将这些信息添加到Intent。

发送二进制内容

分享二进制内容需要通过ACTION_SEND行为结合合适的MIME类型然后将数据放入到URI以 EXTRA_STREAM命名的附加值中。下面是分享一张图片的例子,不过,它适用于分享任何类型的二进制内容:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

注意以下事项:

  • 你可以使用”*/*”的MIME类型,但是这只是会匹配有能力处理通用数据流的Activity。
  • 匹配到的应用程序需要有权限来访问Uri所指向的资源。下面是推荐的方式:
    • 将数据存储到你自己的ContentProvider中,确保其他APP有正确的权限访问你的提供者。提供访问的首选机制是使用per-URI permissions,它是一个临时的只授权接收到的应用程序访问的权限。可以像使用FileProvider帮助类那样简单的创建一个ContentProvider。
    • 使用系统的MediaStore,MediaStore会首先瞄准视频,音频,以及图像MIME类型,然而从Android 3.0之后,它还可以存储非媒体类型。文件可以通过scanFile()被插入到MediaStore之后,scanFile()所提供的onScanCompleted()回调方法会传递一个适用于分享的content://风格的Uri。注意,一旦将内容被添加到MediaStore中,那么设备上的任何APP都可以访问它。

发送多个内容片段

如果要分享内容的多个片段的话,使用ACTION_SEND_MULTIPLE行为可以将Uri分别指向的内容整合成为一个列表。MIME类型取决于你分享的内容。举个例子,如果要分享3张JPEG图片,使用的类型仍然是”image/jpeg”。如果混合了多个类型的话,应该使用”image/*”来匹配一个可以处理任何类型的Activity。如果你分享出一个类型很多样的内容的话,你应该使用”*/*”。就像原先陈述的,这取决于接收的应用程序解析并处理你的数据:

ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));

和以前需要注意的一样,请确保提供的URI所指向的数据,那些接收的应用程序可以访问。

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

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

相关文章

美团点评技术年货:一本覆盖各技术领域、1200+页的电子书

春节已近&#xff0c;年味渐浓。 又到了我们献上技术年货的时候。 不久前&#xff0c;我们已经给大家分享了技术沙龙大套餐&#xff0c;汇集了过去一年我们线上线下技术沙龙99位讲师&#xff0c;85个演讲&#xff0c;70小时分享。 今天出场的&#xff0c;同样重磅——技术博客2…

论文浅尝 | 基于文本关联的知识图谱的无监督嵌入增强

来源&#xff1a;IJCAI2019论文链接&#xff1a; https://www.ijcai.org/proceedings/2019/0725.pdf概述知识图谱嵌入是从多关系数据中提取数据的工具&#xff0c;最近的嵌入模型对从现有数据库中推断新事实具有很高的效率。然而&#xff0c;这种精确结构的数据通常在数量和范围…

ICLR2021 Oral |9行代码提高少样本学习泛化能力

文 | 杨朔知乎本文已获作者授权&#xff0c;禁止二次转载介绍一篇我们刚刚发表在ICLR2021 Oral上的一篇少样本学习工作&#xff0c;简单有效。题目&#xff1a;Free Lunch for Few-shot Learning: Distribution Calibration链接&#xff1a;https://openreview.net/forum?idJW…

LeetCode 106. 已知中序后序 求二叉树

文章目录1. 题目2. 解题2.1 递归2.2 循环1. 题目 类似题目LeetCode 105. 已知前序&中序 求二叉树 2. 解题 2.1 递归 递归法&#xff0c;后序最后一个是根节点 class Solution { public:TreeNode* buildTree(vector<int>& inorder, vector<int>& p…

React Native工程中TSLint静态检查工具的探索之路

背景 建立的代码规范没人遵守&#xff0c;项目中遍地风格迥异的代码&#xff0c;你会不会抓狂&#xff1f; 通过测试用例的程序还会出现Bug&#xff0c;而原因仅仅是自己犯下的低级错误&#xff0c;你会不会抓狂&#xff1f; 某种代码写法存在问题导致崩溃时&#xff0c;只能全…

做一个好的搜索引擎有多难

文&#xff5c;见鹿知乎本文已获作者授权&#xff0c;禁止二次转载前言搜索引擎是个极其复杂的系统工程&#xff0c;搜索引擎上并不会大力出奇迹&#xff0c;需要一点点打磨。在搜索引擎上&#xff0c;q-u相关性计算是基础&#xff0c;但仍需要考虑其他很多因素&#xff0c;其中…

Android官方开发文档Training系列课程中文版:分享简单数据之添加简单的分享行为

原文地址&#xff1a;http://android.xsoftlab.net/training/sharing/shareaction.html 从Android4.0开始&#xff0c;使用ActionProvider可以更方便的在ActionBar上实现一个有效的、用户友好的分享按钮。一个ActionProvider一旦依附到了ActionBar的菜单条目上&#xff0c;它会…

开源开放 | OpenKG组织发布第二批并更新近十个新冠知识图谱开放数据集

2020年2月11日&#xff0c;世界卫生组织宣布了新型冠状病毒肺炎官方正式命名为 COVID-19&#xff0c;21日国家卫健委决定与世界卫生组织保持一致&#xff0c;中文名称不变。随着关于新型冠状病毒病毒疫情的不断发展&#xff0c;有关疫情的各类信息也在不断更新。OpenKG 紧随疫情…

事件抽取中的“门面技术”:事件名称生成浅谈

6月10日&#xff0c;“网信中国”微信公众号发布消息称&#xff1a;微博热搜榜、热门话题榜暂停更新一周&#xff0c;这使得很多热榜平台都受到波及&#xff0c;而在吃瓜之余&#xff0c;我们更进一步地思考热点榜单以及热点名称生成背后的技术&#xff0c;并发出两连问&#x…

保障IDC安全:分布式HIDS集群架构设计

背景 近年来&#xff0c;互联网上安全事件频发&#xff0c;企业信息安全越来越受到重视&#xff0c;而IDC服务器安全又是纵深防御体系中的重要一环。保障IDC安全&#xff0c;常用的是基于主机型入侵检测系统Host-based Intrusion Detection System&#xff0c;即HIDS。在HIDS面…

LeetCode 1154. 一年中的第几天

1. 题目 给你一个按 YYYY-MM-DD 格式表示日期的字符串 date&#xff0c;请你计算并返回该日期是当年的第几天。 通常情况下&#xff0c;我们认为 1 月 1 日是每年的第 1 天&#xff0c;1 月 2 日是每年的第 2 天&#xff0c;依此类推。每个月的天数与现行公元纪年法&#xff…

数据有偏差,照样能学对!20年前就有这么强的算法了?

文 | 白鹡鸰给小铁比了个心编 | 小轶背景“每个人都依赖自己的知识和认知&#xff0c;同时又为之束缚&#xff0c;还将此称为现实&#xff1b;但知识和认识是非常暧昧的东西&#xff0c;现实也许不过是镜花水月——人们都是活在偏见之中的&#xff0c;你不这样认为吗&#xff1…

论文浅尝 | 基于图卷积网络的跨语言图谱实体对齐

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究兴趣&#xff1a;知识图谱问答本文提出了一种基于图卷积网络的跨语言实体对齐方法&#xff0c;通过设计一种属性 embedding 用于 GCN 的训练&#xff0c;发现GCN能同时学习到特征 embedding 和属性 e…

大众点评搜索基于知识图谱的深度学习排序实践

1. 引言 挑战与思路 搜索是大众点评App上用户进行信息查找的最大入口&#xff0c;是连接用户和信息的重要纽带。而用户搜索的方式和场景非常多样&#xff0c;并且由于对接业务种类多&#xff0c;流量差异大&#xff0c;为大众点评搜索&#xff08;下文简称点评搜索&#xff09;…

论文浅尝 \ 联合知识图谱实例和本体概念的通用表示学习

论文笔记整理&#xff1a;周虹廷&#xff0c;浙江大学研究生。研究方向&#xff1a;知识图谱&#xff0c;图表示学习等。论文链接&#xff1a;http://web.cs.ucla.edu/~yzsun/papers/2019_KDD_JOIE.pdf本文是发表在KDD 2019上的关于知识图谱表示学习的论文。现有知识图谱表示模…

手握顶会顶刊论文,自信满满面试算法岗竟被刷?

2020国内深度学习框架领域百花齐放。各大公司也都陆续推出了自己的框架&#xff0c;大大推动了深度学习的发展。深度学习俨然已经渗入到我们生活中的每个角落&#xff0c;给生活带来极大便利。深度学习能够针对生产生活所面临的复杂问题&#xff0c;给出高准确率、操作简易、成…

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

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

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

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

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

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

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

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