Android - 分享内容 - 接收其他APP的内容
就象程序可以发送数据给其他程序,所以也可以接收其他程序的数据。想一下用户如何和程序交互,以及想从其他程序接收什么样类型的数据。例如,一个社交程序可能对接收其他程序的文字(比如有趣的网址)感兴趣。Google+ 程序可接收文字和单多张图片。用这个app,用户可以和容易的用Android Gallery中的相片在Google+上发布。
更新Manifest
intent filter会告诉系统程序会打算接收什么。就和前面讲的如何用ACTION_SEND创建intent相似,创建intent filter来接收带有这个操作的intent。在manifest中用<intent-filter>元素来来定义一个intent filter。例如,如果程序可接收文字,任何类型的单张图片,或任何类型的多张图片,mainfest应该象:
<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>
注意:更多关于intent filters和intetent解决方案请参考Intents and Intent Fileters
当其他程序通过创建intent然后传递给startActivity()来分享上面的类容,你的程序会在intent chooser列表中显示,如果用户选择了你的程序,相应的activity(上面例子中的.ui.MyActivity)将会被启动。然后就由你来在代码和界面中来处理内容了。
处理传入的数据
要处理Intent传递的数据,首先调用getIntent()来获得Intent对象。一旦获得了这个对象,可以通过查看数据来决定接下来怎么做。记住如果activity可以从系统的其他部分启动,比如launcher,那么需要在查看intent的时候考虑这些情况。
void onCreate (Bundle savedInstanceState) {
...
// 获得 intent, action 和 MIME type
Intent 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); // 处理发送来的文字
} else if (type.startsWith("image/")) {
handleSendImage(intent); // 处理发送来的图片
}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
if (type.startsWith("image/")) {
handleSendMultipleImages(intent); // 处理发送来的多张图片
}
} else {
// 处理其他intents,比如由主屏启动
}
...
}
void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
// 根据分享的文字更新UI
}
}
void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
// 根据分享的图片更新UI
}
}
void handleSendMultipleImages(Intent intent) {
ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageUris != null) {
// 根据分享的多张图片更新UI
}
}
注意:要格外小心的检查传入的数据,你不知道其他程序传进来什么。例如,有可能设置了错的MIME类型,或者图片可能非常大。还要记住,在另外一个线程中处理二进制数据,而不是UI线程。
更新UI可以是像填充EditText一样简单,或者更难一些像在一张图片上添加一个有趣的滤镜。由你的程序来决定接下来会发生什么。
上一篇:Android - 分享内容 - 给其他APP发送内容
下一篇:Android - 分享内容 - 添加一个简单的分享操作
Android - 分享内容 - 接收其他APP的内容的更多相关文章
- Android - 分享内容 - 给其他APP发送内容
创建一个intent时,必须要指定intent将要触发的操作.Android定义了很多操作,包括ACTION_SEND,就象可以猜到的一样,表示intent是把数据从一个activity发送给另一个, ...
- Android - 分享内容
Android程序一个很重要地特性是他们可以相互通讯和交互.为什么要重新开发那些不是你程序的核心而且其他程序已经有的功能呢? 这里将要介绍一些使用Intent API和ActionProvider对象 ...
- Android中实现APP文本内容的分享发送与接收方法简述
谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...
- Android分享内容和接收分享内容小小实现
先来说说分享,毕竟没有分享何来接收分享可谈? 分享目前已实现的有两种方式:后台代码实现.ShareActionProvider实现,接着先说通过代码实现 Intent intent=new Inten ...
- iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容
Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight.集成Spotlight的 ...
- Android基础笔记(十四)- 内容提供者读取联系人
利用内容提供者读取联系人 利用内容提供者插入联系人 内容观察者的原理 利用内容观察者监听系统应用数据库或者自己应用数据库的变化 利用内容提供者读取联系人 读取联系人相对于读取短信来说就复杂非常多了,我 ...
- 【网站公告】请大家不要发表任何涉及“得到App”的内容
大家好,今天我们收到来自杭州某某网络科技有限公司的维权骑士团队的邮件,说他们受某某(天津)文化传播有限公司委托,展开维权.园子里有些博主因为学习“得到App”的课程在博客中记了一些笔记,也被维权. 为 ...
- android ----- 分享的连接在手机上打开App
首先做成HTML的页面,页面内容格式如下: <a href="[scheme]://[host]/[path]?[query]">启动应用程序</a> 这一 ...
- python 全栈开发,Day127(app端内容播放,web端的玩具,app通过websocket远程遥控玩具播放内容,玩具管理页面)
昨日内容回顾 1. 小爬爬 内容采集 XMLY 的 儿童频道 requests 2. 登陆 注册 自动登陆 退出 mui.post("请求地址",{数据},function(){} ...
随机推荐
- Struts2 后台action接收 jsp页面中checkbox中的值
如前端页面jsp中的标签为: <form action="myurl"> <input type="checkbox" name=" ...
- storm-编程入门
一 编程接口 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbm ...
- Ubuntu 32下Android NDK+NEON的配置过程及简单使用举例
1. 利用VMware在Windows7 64位下安装Ubuntu13.10 32位虚拟机: 2. 从 https://developer.android.com/tools/sdk/ndk/in ...
- [Oracle] - 性能优化工具(4) - AWRDD
AWRDD是用于比較两个AWR快照,从而获得不同一时候期的性能. 运行例如以下语句获得AWRDD: @?/rdbms/admin/awrddrpt.sql 2025 23 2月 2014 07:12 ...
- ps、top 、free查看用户资源信息
查看root用户的进程信息. 运行命令: ps -u root 查看oracle用户的进程信息. 运行命令: ps -u oracle 若查看现在的资源占用情况,如何呢? 运行命令: top 可以 ...
- Thinkphp中field和getField
在数据库查询操作中field和getField方法是使用最频繁的.可是两者是有一定差别的.在这里记录下. field方法是用于定义要查询的字段(支持字段排除). getField方法获取数据表中的某个 ...
- 一个极其简洁的Python网页抓取程序,自己主动从雅虎財经抓取股票数据
本程序使用Python 2.7.6编写,扩展了Python自带的HTMLParser,自己主动依据预设的股票代码列表,从Yahoo Finance抓取列表中的数据日期.股票名称.实时报价.当日变化率. ...
- 集成学习---bagging and boosting
作为集成学习的二个方法,其实bagging和boosting的实现比较容易理解,但是理论证明比较费力.下面首先介绍这两种方法. 所谓的集成学习,就是用多重或多个弱分类器结合为一个强分类器,从而达到提升 ...
- iOS: NSMutableArray的方法removeObject:inRange:
- (void)removeObject:(id)anObject inRange:(NSRange)aRange
- Connecting Docker for Cloud Services using SDN and Network Virtualization
Abstract The explosive scale of container CPUs needs highly efficient network virtualization Chal ...