原文地址:http://android.xsoftlab.net/training/sharing/receive.html

正如你的程序可以发送数据给其它程序,那么你也可以轻松的接收数据。想象一下用户如何与你的程序交互,以及你想从其它应用程序接收的数据类型。举个例子,一个社交网络的程序可能对文本内容更感兴趣,比如一个有意思的Web地址,Google+ APP允许接收文本、单张图片或者多张图片。通过这个APP,用户可以很轻松的从Android图库APP启动一个Google+的发送照片任务。

更新你的清单文件

意图过滤器告知系统可以接收什么样的意图。举个例子,如果应用程序可以接收并处理文本内容,和任何类型的一张图片,或者任何类型的多张图片,你的清单文件应该声明成这样:

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

Note:有关更多意图过滤器的信息以及意图的分辨,请阅读: Intents and Intent Filters

当另一个程序通过构造一个意图并且传递给startActivity()并尝试分享这几种类型的任意一种时,你的程序会在意图选择器中列出各种选项。如果用户选择了你的程序,那么相应的activity会被启动。然后由你的代码和UI来妥善的处理这些内容。

处理到来的内容

为了处理由Intent传递过来的内容,开始调用getIntent()方法获得Intent对象。一旦你获得了这个对象,你可以检查其中的内容然后在决定接下来怎么做。记住一点,如果这个activity可以由系统的其它部分启动,比如系统的桌面,然后你需要在执行检查的时候将这种情况考虑在内。

void onCreate (Bundle savedInstanceState) {...// Get intent, action and MIME typeIntent intent = getIntent();String action = intent.getAction();String type = intent.getType();if (Intent.ACTION_SEND.equals(action) && type != null) {if ("text/plain".equals(type)) {handleSendText(intent); // Handle text being sent} else if (type.startsWith("image/")) {handleSendImage(intent); // Handle single image being sent}} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {if (type.startsWith("image/")) {handleSendMultipleImages(intent); // Handle multiple images being sent}} else {// Handle other intents, such as being started from the home screen}...
}
void handleSendText(Intent intent) {String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);if (sharedText != null) {// Update UI to reflect text being shared}
}
void handleSendImage(Intent intent) {Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);if (imageUri != null) {// Update UI to reflect image being shared}
}
void handleSendMultipleImages(Intent intent) {ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);if (imageUris != null) {// Update UI to reflect multiple images being shared}
}

Caution:检查到来的附加数据要格外当心,你永远不会知道其它应用程序会发来什么。举个例子,比如可能设置了错误的MIME类型,或者发送来的图像可能非常的大。还要记得要在单独的线程中处理二进制数据,而不是主线程。

更新UI可以像填充一个EditText一样简单,否则的话它会像对图片应用有趣图片过滤器一样复杂,这需要您的应用程序明确接下来将要做什么。

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

  1. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  2. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

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

    原文地址:http://android.xsoftlab.net/training/building-content-sharing.html 引言 Android应用程序有一项伟大的事情就是它们有可 ...

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

    原文地址:http://android.xsoftlab.net/training/secure-file-sharing/index.html 导言 APP经常需要给其它的APP提供一个或多个文件. ...

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

    原文地址:http://android.xsoftlab.net/training/secure-file-sharing/share-file.html 一旦APP设置通过URI的方式共享文件,你需 ...

  8. Android官方开发文档Training系列课程中文版:Android的安全建议

    原文地址:http://android.xsoftlab.net/training/articles/security-tips.html Android系统内置的安全策略可以有效的降低应用程序的安全 ...

  9. Android官方开发文档Training系列课程中文版:线程执行操作之线程间通讯

    原文地址:http://android.xsoftlab.net/training/multiple-threads/communicate-ui.html 上节课我们学习了如何启动一项由Thread ...

  10. Android官方开发文档Training系列课程中文版:后台加载数据之处理CursorLoader的查询结果

    原文地址:http://android.xsoftlab.net/training/load-data-background/handle-results.html 就像上节课所说的,我们应该在onC ...

最新文章

  1. 加速产业生态算力升级,华为鲲鹏展翅福州
  2. 用python的matplotlib画标准正态曲线
  3. Wikioi 1222 信与信封问题(二分图匹配)
  4. mysql二进制大文件_Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)...
  5. 如何删除 eclipse 中多余的 Tomcat server?为什么产生这种 bug?
  6. php @touch,touch - [ php中文手册 ] - 在线原生手册 - php中文网
  7. xp CMD命令参数
  8. java insert 返回主键_MyBatis中insert操作返回主键的实现方法 – java – www.cfei.net
  9. 程序员的 升级 ,价值观的改变
  10. 使用T-SQL语句创建数据库
  11. 数据库知识整理 - 概述、数据模型、三级模式结构
  12. 华尔街见闻-2016年2月
  13. 苹果6手机服务器停止响应,iphone6被停用怎么办?苹果6被停用解决方法汇总
  14. jquery iframe 父子互操作
  15. css爱心代码(抖音上很火)
  16. (12)代码概述(旋翼)
  17. 安装虚拟机Ubuntu 18.04基础配置
  18. centos安装sersync
  19. CNCF中国云原生调查报告
  20. (采用两种方法)美国的体积测量系统,计量单位转换(C语言)

热门文章

  1. CPU加了缓存后,有人急了~
  2. LeetCode 2071. 你可以安排的最多任务数目(二分查找)
  3. LeetCode 1617. 统计子树中城市之间最大距离(枚举所有可能+图的最大直径)
  4. LeetCode 1222. 可以攻击国王的皇后(set)
  5. LeetCode 1305. 两棵二叉搜索树中的所有元素(二叉树迭代器)
  6. LeetCode 400. 第N个数字(数学)
  7. LeetCode 1071. 字符串的最大公因子(字符串的最大公约数)
  8. LeetCode 101. 对称二叉树(递归循环)
  9. go oracle编程,go基础编程(一):第一个go程序-hello word
  10. andriod studio 运行 无结果_无负压静音供水设备下篇一