内容共享 之 发送内容到其他的APP
2013-03-25 15:45
155 查看
源地址:http://developer.android.com/training/sharing/send.html
当构造一个intent的时候,必须要指明要触发的动作。android定义了一系列动作,其中有一个就是
和
当构造一个intent的时候,必须要指明要触发的动作。android定义了一系列动作,其中有一个就是
ACTION_SEND,如文字的意思,表示intent从一个activity发送内容到另外一个activity,甚至可在不同进程间通信。要发送数据给另外一个activity,你仅仅要做的就是指明数据和它的类型,系统会自动是识别这个信息,然后调用startActivity的时候就会显示出可以接收这个信息的activity,可能有多个,如果只有一个,那么会直接启动这个个activity.同样的,你可以在你的manifest文件里面声明你的activity想要接收的数据类型,就是上一节说的内容。
利用intent来在两个APP之间共享内容,最常用的地方就是社交化网络的内容分析。intent可以让用户方便快速的分享内容到自己喜欢的APP。
注意:给一个ActionBar添加一个分享的功能,最好的方法是调用调用ShareActionProvider,这个函数是在api 14 之上可用的。关于这个函数的更多信息请阅读:Adding an Easy Share Action.发送文本内容对ACTION_SEND最直接和常用的使用是用来发送一段文本内容到另外一个activity。例如,android自带的浏览器可用把当前打开的URL页面作为文本内容分享给其他的APP。通常是通过邮件或者社交网络来分享一篇文章或整个网页内容。下面的代码就可以实现这种分享需求:
[code]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);
如果系统有一个APP里面有匹配ACTION_SEND和text/plain类型的MMI的过滤器(filter),那么系统就会在上面的代码运行的时候启动这个APP,如果有多个,那么就会都显示出来,让用户选择一个。也可以使用Intent.createChooser()来创建一个选择器,那么每次都会显示匹配的APP。
即使用户在之前有选择默认的程序,但是如果用上面的createChooser来创建了一个选择器,那么,还是会每次都会显示出来所有的匹配的APP
如果没有APP符合动作和数据类型,那么系统会显示一条信息。
可以为选择器指定标题
下面是修改的代码,创建一个选择器:
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)));
结果如图所示:
可以根据需求,设置其他标准的extra数据到intent:EXTRA_EMAIL,
EXTRA_CC,
EXTRA_BCC,
EXTRA_SUBJECT.然而,如果接收到intent的APP如果没有设置为支持前面这些标准的exta数据,那么这些数据会被自动忽略,不会产生任何效果。也可以自定义extra的数据,但是除非接收的APP可以理解这个数据,不然不会产生任何作用。所以一般的,你自定义的extra数据,都是同时也被要接收这个intent的APP定义的。
注意:有一些邮箱应用,如Gmail,就需要一个String[]作为extra数据,比方说EXTRA_EMAIL
和
EXTRA_CC,用
putExtra(String, String[])把这个需要的数据放到intent里面去。
发送二进制内容
二进制数据的发送要用到一个由ACTION_SEND动作和MIME 类型组成的intent,以及一个存放Uri的EXTRA_STREAM的extra数据。这个经常用来分享一个图片内容,但其实这种方式可以被用来分享所有的二进制内容。
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 类型,但这个仅仅会匹配常用的类型
接收intent的APP需要有访问Uri指定的资源的权限。有几种处理这种情况的方式:
把数据放到外部存储器或者共享存储器,比方说SD卡,这样所有的APP都可以读取这个数据。利用Uri.fromFile()创建一个Uri,传递给要执行分享动作intent。这里要记住,不是所有的APP处理的是file://风格Uri。
利用openFileOutput(),设置模式为MODE_WORLD_READABLE,创建一个文件,把数据写入到这个文件里面,然后利用getFileStreamPath()可以返回关于这个数据的一个File对象,像上面一样,可以利用Uri.fromFile()创建一个file://风格的Uri,传递给intent.
多媒体文件,如视频,音频,图像,都可以用, java.lang.String[], android.media.MediaScannerConnection.OnScanCompletedListener)]scanFile()来扫描和添加到系统的MediaStore里面。
onScanCompleted()回调函数会返回一个content://风格Uri,然后可以在你的要执行分享动作的intent 里面使用。
图像文件也可用insertImage()方法插入到系统的MediaStore里面,会返回一个content://风格Uri,放到intent里面。
在你自己的ContentProvider里面存放数据,保证其他的APP有权限可以访问你的这个provider。
发送多个内容
想要同时发送分享多个内容,可以使用ACTION_SEND_MULTIPLE创建一个intent,同时设置一个Uri列表指向要分享的多个内容。MIME类型,根据你要分享的内容类型进行组合。比方说,如果想要分享3张JPEG图片,那么就使用"image/jpeg"。但是如果如果分享的图片类型是多种的,那么就可以使用"image/*"来匹配那个可以处理任何图片类型的activity。当你分享多种类型的内容时候,就可以用"*/*"来指定。如前面所说,由接收这个intent的APP来解析和处理你分享的数据。例如:
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.."));
在所有分享动作之前,请确保被发送到的APP有访问和处理有你发送的Uri指定的数据的权限。
相关文章推荐
- 【Android Training - 06】分享数据内容 [Lesson 1 - 发送分享的数据到其他App]
- Android - 分享内容 - 给其他APP发送内容
- 【Android Training - 06】分享数据内容 [Lesson 1 - 发送分享的数据到其他App]
- 先其他app发送简单数据
- android 从其他app接收分享的内容
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
- Sending Content to Other Apps 将内容发送到其他应用程序
- android 学习receiver和发送广播,其中监听其他activity的启动demo;给activity加自定义权限只有指定有权限的app可以监听到
- 共享数据 之 从其他APP接收数据
- android给其他App发送简单的数据
- 和其他App分享简单的数据(1)给其他App发送简单的数据
- 发送用户给其他APP
- IOS App开启iTunes文件共享 去documen的内容
- 如何实现程序调用系统邮件,发送app中抓取的xml图片和内容到指定的邮箱
- 十、App内容共享 (如果访问内存卡,需要权限)
- Android中实现APP文本内容的分享发送与接收方法简述
- 简述Android中实现APP文本内容的分享发送与接收方法
- 和其他App分享文件(1)设置文件共享
- 和其他App分享文件(3)请求一个共享文件
- Android发送数据给其他APP