Android官方开发文档Training系列课程中文版:与其它APP交互之允许其它APP启动你的Activity

原文地址:http://android.xsoftlab.net/training/basics/intents/filters.html

在前两节课程中我们只关注了事情的一面:从你的APP启动其它APP。但是如果你的APP可以执行一些功能,并且这些功能可以被其它APP所利用,那么你可以做一个功能来响应其它APP的请求。举个例子,如果你构建了一个社交APP并且可以给用户的朋友分享消息或者照片,那么这是支持ACTION_SEND意图的最佳兴趣点,所以用户可以从其它APP中启动一个”share”行为,然后启动你的APP来完成这个功能。

为了允许其它APP可以启动你的Activity,你需要添加一个< intent-filter>元素标签到清单文件中的对应的< activity>标签元素下。

当APP被安装到设备上之后,系统会识别你的意图过滤器,并且添加该信息到所有支持的内部意图目录中。当APP使用了隐式意图调用了startActivity()或startActivityForResult(),那么系统会寻找那些activity可以响应这个意图。

添加意图过滤器

为了可以适当的定义Activity可以处理哪一种意图,你添加每一个意图过滤器应该尽可能的指明activity可以接受的行为类型和数据类型。

系统可能通过给定的Intent发送到activity,如果这个activity有一个意图过滤器正好可以完全匹配以下的Intent对象标准:

Action:
这个行为可以执行的名称。通常平台上定义的值比如是ACTION_SEND或ACTION_VIEW。

在意图过滤器中使用< action>元素标签来指定该值。该值必须是这个行为的全称,而不是API常量(请看下面的例子)。

Data:
有关这个意图的数据描述。

在意图过滤器中使用< data>元素标签指定该值。使用该元素的更多属性,你可以仅仅指定MIME类型,URI前缀类型,URI计划类型,或者这些类型的组合,以及可以接收的其它数据类型。

Note:如果你不需要声明Uri数据的指定类型(比如你的activity处理其它种类的附加数据,而不是URI),你应该通过android:mimeType属性声明activity可以处理的数据类型,比如text/plain或者image/jpeg。

Category:
提供了一种附加方式来描述activity处理intent,通常与启动的用户手势或者位置有关。这里有几个系统支持的不同的分类,但是大多数是很少使用的。然而,所有的隐式意图会在默认情况下使用CATEGORY_DEFAULT定义。

可以在意图过滤器中使用< category>元素标签指定该值。

在意图过滤器中,你可以通过在意图过滤器中使用相应的XML元素来声明activity可以接收的意图标准。

举个例子,这里的activity可以处理ACTION_SEND意图,当数据类型为文本或者图像时。

<activity android:name="ShareActivity"><intent-filter><action android:name="android.intent.action.SEND"/><category android:name="android.intent.category.DEFAULT"/><data android:mimeType="text/plain"/><data android:mimeType="image/*"/></intent-filter>
</activity>

每个到来的Intent都只会指定一个行为和一个数据类型,但是在每一个过滤器中声明多个< action>,< category>,和< data>元素的话,这就没问题了。

如果任意的两对行为和数据会在他们的行为中相互排斥的话,你应该创建单独的意图过滤器来指明哪个行为可以接收,当也匹配到相应的数据类型时。

举个例子,假设activity在ACTION_SEND行为下或者ACTION_SENDTO行为下都可以处理文本和图像。在这种情况下,你必须定义两个单独的意图过滤器,因为ACTION_SENDTO意图必须使用数据Uri指定接收地址通过使用send或sendto URI计划:

<activity android:name="ShareActivity"><!-- filter for sending text; accepts SENDTO action with sms URI schemes --><intent-filter><action android:name="android.intent.action.SENDTO"/><category android:name="android.intent.category.DEFAULT"/><data android:scheme="sms" /><data android:scheme="smsto" /></intent-filter><!-- filter for sending text or images; accepts SEND action and text or image data --><intent-filter><action android:name="android.intent.action.SEND"/><category android:name="android.intent.category.DEFAULT"/><data android:mimeType="image/*"/><data android:mimeType="text/plain"/></intent-filter>
</activity>

Note:为了可以接收隐式意图,你必须在过滤器中包含类别CATEGORY_DEFAULT。startActivity()和startActivityForResult()方法会对待所有的Intent,仿佛他们都声明了CATEGORY_DEFAULT类别。如果你没有在意图过滤器中声明它,那么将不会有隐式意图传送到该activity中。

有关更多关于发送和接收ACTION_SEND意图来执行社会分享行为的相关信息,请参见课程: Receiving Simple Data from Other Apps.

在Activity中处理意图

为了决定要在activity中采取什么行为,你可以从启动activity的Intent中读取信息。

随着activity被启动,你可以调用getIntent()方法获得启动该Activity的Intent。你可以在activity的任意生命周期内做这样的事情,但是你通常应该在较早的回调方法中做这些事情,比如onCreate()或onStart()。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// Get the intent that started this activityIntent intent = getIntent();Uri data = intent.getData();// Figure out what to do based on the intent typeif (intent.getType().indexOf("image/") != -1) {// Handle intents with image data ...} else if (intent.getType().equals("text/plain")) {// Handle intents with text ...}
}

返回结果

如果需要将结果返回给调用该activity的那个activity,那么只需要简单的调用setResult()方法然后设置一个结果码以及结果Intent。当你的操作完成并且用户应该返回原来的那个activity是,调用finish()方法来关闭你的activity,像下面这样:

// Create intent to deliver some kind of result data
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
setResult(Activity.RESULT_OK, result);
finish();

你需要每一次都给结果指定一个结果码。通常情况下,要不然是RESULT_OK或者是RESULT_CANCELED。必要的话,可以在Intent中提供附加数据。

Note:默认情况下,结果会设置RESULT_CANCELED。所以,如果用户在完成功能之前或者在你设置结果之前按下了返回按钮,那么原来的activity会接收到”canceled”结果。

如果你简单的需要返回一个整型,这个整型指明了若干个结果选项,那么你可以设置结果码为比0大的任何值。如果你使用了结果码来传递一个整型值,那么你不再需要包含Intent对象,你可以调用setResult()方法,然后只传一个结果码进去:

setResult(RESULT_COLOR_RED);
finish();

在这个例子中,这可能对结果有损伤,所以结果码是一个本地变量。这种情况在你自己的APP中运行的话,效果会很好,因为原来的activity可以接收到结果码,然后引用一个公开的常量来判断结果码的值。

Note:这里不需要检查你的activity是否是通过startActivity()或者startActivityForResult()启动的。那个启动你activity的activity可能希望会有个结果返回。如果原来的activity调用了startActivityForResult(),那么系统会传递setResult()结果,否则,这个结果会被忽略。

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

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

相关文章

论文浅尝 | GraphSAINT—基于图采样的归纳学习方法

论文笔记整理&#xff1a;杨海宏&#xff0c;浙江大学博士生&#xff0c;研究方向为开放世界下的多语言知识问答。1. 简介受显存的因素限制&#xff0c;应用图神经网络于大规模图学习任务上面临“邻居爆炸&#xff08;Neighbor Explosion&#xff09;”问题&#xff0c;导致网络…

LeetCode 105. 已知前序中序 求二叉树

文章目录1. 题目2. 解题1. 题目 类似POJ 2255 Tree Recovery 2. 解题 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {unordered_map<int,int> m;//哈希表for(int i 0; i < inorder.size(); i) {…

李在福羽毛球教学

2020年11月27日更 工作的业余之时一定要记得好好健身哦&#xff0c;争取做个健康小达人很行动上的小巨人。不困于时间、不困于地点、不困于等等。没有借口哦&#xff0c;投资自己的身体也是未来很重要的一部分噶。 1 握拍&#xff1a;大拇指和四个手指头握紧&#xff0c;可以更…

不讲武德,只用标签名就能做文本分类

文 | 谁动了我的炼丹炉编 | 兔子酱今天给大家介绍一篇微软研究院在EMNLP2020上发表的论文&#xff0c;主题是弱监督文本分类。看到标题的你可能会和我刚开始一样震惊&#xff0c;只是知道标签名怎么给文本分类呢&#xff1f;是的&#xff0c;虽然听起来不可思议&#xff0c;但看…

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

原文地址&#xff1a;http://android.xsoftlab.net/training/building-content-sharing.html 引言 Android应用程序有一项伟大的事情就是它们有可以与其它应用程序交流及整合。为什么不重新使用已经存在于其它APP中的非核心功能呢&#xff1f; 这节课覆盖了一些共同的方式&a…

美团点评技术年货:一本覆盖各技术领域、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…

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

原文地址&#xff1a;http://android.xsoftlab.net/training/sharing/receive.html 正如你的程序可以发送数据给其它程序&#xff0c;那么你也可以轻松的接收数据。想象一下用户如何与你的程序交互&#xff0c;以及你想从其它应用程序接收的数据类型。举个例子&#xff0c;一个…

腾讯-视频打标签算法探讨

腾讯-视频打标签算法探讨&#xff1a;https://cloud.tencent.com/developer/article/1191746

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…

Android官方开发文档Training系列课程中文版:分享文件之配置文件共享

原文地址&#xff1a;http://android.xsoftlab.net/training/secure-file-sharing/index.html 导言 APP经常需要给其它的APP提供一个或多个文件。举个例子&#xff0c;相册APP可能需要提供文件以供编辑&#xff0c;或者一个文件管理的APP可能希望用户在外部存储器中的两个区域…