博主参加了2013博客之星评选,谢谢谢谢您的支持,投票猛击:

http://vote.blog.csdn.net/blogstaritem/blogstar2013/xyz_lmn

为了应用的推广、传播,很多的应用中都有“分享”功能,一个按钮,点击后会出现短信、微博等等一切实现了分享功能的应用列表。这一篇文章主要介绍怎么调用分享功能和怎么实现分享接口让自己应用出现分享列表中。Android应用中能很方便的完成这些功能,这也正是Android的伟大之处,他能很简单的完成应用之间的沟通以相互整合。

调用分享功能

1、分享文本

分享功能使用的隐式启动Activity的方法,这里的Action使用的是ACTION_SEND。

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

效果如下图的图一。

2、改变分享列表标题

使用上面的分享方式分享列表标题为“使用一下内容完成操作”,Android中提供了Intent.createChooser(),这样能一直显示分享选择列表,并且修改了分享列表标题内容。

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.createChooser()的好处:

If you callIntent.createChooser()for the intent, Android willalwaysdisplay the chooser. This has some advantages:

  • Even if the user has previously selected a default action for this intent, the chooser will still be displayed.
  • If no applications match, Android displays a system message.
  • You can specify a title for the chooser dialog.

分享功能不只是Intent.EXTRA_TEXT,还可以EXTRA_EMAIL,EXTRA_CC,EXTRA_BCC,EXTRA_SUBJECT. 只需要接受方完成响应数据接受。

3、分享图片

分享功能还支持二进制内容(Binary Content),但是多数是处理的图片,因为shareIntent.setType("image/jpeg")这一项设置了内容类型。可也以是其他类型,需要接受方支持。

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

4、分享图片列表

分享功能不仅支持单张图片,还支持图片列表,这里还是说的范围太窄了,应该声明不仅仅是图片。

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.."));

实现分享功能

上面说的都是怎么调用分享功能,以下就开始写怎么实现分享功能,让我们的应用也出现在分享列表中。前面也说了分享功能是使用隐式调用Activtiy实现的,Activity需要声明<intent-filter>

声明intent-filter

 <activityandroid:name="com.example.sharedemo.ShareActivity"android:label="@string/app_name" ><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-filter,当然可以更多,这里只是举个例子,

处理接收数据

声明了intent-filter,响应的Activity就要处理响应的数据,示例如下:

public class ShareActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(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);String sharedTitle = intent.getStringExtra(Intent.EXTRA_TITLE);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}}
}

通过声明intent-filter,处理接受到的数据就能完成分享的接收功能。

更多

上面只做了分享功能简单的说明,伴随着Android api的升级,也出现了一些新的完成“分享”功能的方法,比如ShareActionProvider,更多请参考。

示例下载

/**
* @author 张兴业

* http://blog.csdn.net/xyz_lmn
* 我的新浪微博:@张兴业TBOW
*/

参考:

http://developer.android.com/training/sharing/index.html

Android应用中使用及实现系统“分享”接口相关推荐

  1. uni-app 添加到“用其他应用打开”中、app加入系统分享列表、获取分享的文件

    地址:添加到"用其他应用打开"中.app加入系统分享列表.获取分享的文件 - DCloud 插件市场 添加到"用其他应用打开"中.app加入系统分享列表.获取分 ...

  2. Android应用中实现系统“分享”接口

    在android下各种文件管理器中,我们选择一个文件,点击分享可以看到弹出一些app供我们选择,这个是android系统分享功能,我们做的app也可以出现在这个列表中. 第一步:在Manifest.x ...

  3. android studio怎么使用sharesdk,Android Studio中ShareSDK分享的使用.

    简介 如今的app中,几乎都包含了分享这个功能,十分的常用,如 我们经常使用的网易云音乐 一般我们都会采用市面上用的最广泛的ShareSDK来完成类似的功能. www.mob.com 集成 步骤 注册 ...

  4. Android 自动抓取网站图标实现分享样式的定制

    分享是一个app产生用户数据的重要来源,也是app宣传拉新的重要途径,所以对于稍微成熟一点的app分享是必不可少的模块.相信稍微接触过分享的人都清楚,分享到外部app很简单,只要接入微信.微博.QQ等 ...

  5. android 4.4 禁止下拉,Android开发中禁止下拉式的实现技巧

    我们开发项目的时候,经常会看到禁止的情况,而Android开发中并没有直接调用的接口,下面是爱站技术频道小编就给大家介绍的Android开发中禁止下拉式的实现技巧,希望网友们喜欢! 分享给大家供大家参 ...

  6. android - 调用系统分享功能分享图片

    step1: 编写分享代码, 将Uri的生成方式改为由FileProvider提供的临时授权路径,并且在intent中添加flag 注意:在Android7.0之后,调用系统分享,传入URI的时候可能 ...

  7. apicloud加java,【APICloud】App开发中加入系统分享功能案例源码分享

    最近做一个在app中加入系统分享的功能,分享一下自己踩坑的记录和成果. 安卓可以加入系统相册和文件管理器的分享菜单中,iOS目前只做到了加入在其他应用里调起系统分享的菜单,系统相册还有一些问题没有解决 ...

  8. Android 调用系统分享图片、视频等文件

    目录 序言 打开文件管理器 分享操作 文件Uri转化为String 序言 一般都会集成Umeng的分享,基本的分享都可以满足,但是要想分享文件,比如pdf.doc.ppt等类型时,umeng就不能满足 ...

  9. 新版本系统适配: Android 12 中的兼容性变更

    随着 Android 12 正式版 的发布,越来越多的用户将升级至最新版本.Android 12 带来大量新 API 和功能更新的同时也带来了平台兼容性的变更,我们建议开发者优先对当前应用进行测试,并 ...

最新文章

  1. Java并发编程之线程状态总结
  2. 命名实体识别_用膨胀卷积进行命名实体识别 NER
  3. 【转】Nginx反向代理和负载均衡
  4. [Translation]《击鼓》
  5. html长图转换成pdf,将长 html 导入拆分 PDF
  6. Kotlin学习笔记29(完结篇) Flow part2 Flow的Buffer 中间操作符zip 打平 异常处理 Flow的完成 onCompletion的优势 onCompletion陷阱
  7. 动态规划经典例题汇总 (附最全题目链接)
  8. 兄弟打印机内存已满清零方法_兄弟打印机全部清零操作方法
  9. 《缠中说禅108课》32:走势的当下与投资者的思维方式
  10. eclispe/myeclipse中输入法的问题
  11. Web前端案例——学成网首页制作
  12. Gitpod---可以在线运行Github上代码的IDE
  13. Mq的幂等性问题分析和基本处理
  14. 华为机考108题(c++)(52-61)
  15. 福建闽北卫生学校计算机考试,★福建闽北卫生学校
  16. 啃书:《利用python进行数据分析》第六章——数据加载(三)
  17. c语言鸣炮21响,肱二头肌高级训练法--“21响礼炮”
  18. 想要成为一名合格的软件测试工程师,你得会些啥?
  19. php 图片视频模糊处理,视频图像模糊处理
  20. 企业微信增长案例 | 零售转型视光服务,宝岛眼镜是怎么做到的?

热门文章

  1. php 简单日志搜索
  2. windows 打印机 print spooler 无法启动 错误1068 的问题
  3. HDU 2604 Queuing
  4. WideString 和 string区别
  5. SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法...
  6. [CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字
  7. lighttpd 之防盗链
  8. 数据库表TreeView树的快速生成
  9. git log控制输出宽度
  10. 二层、三层、四层交换的比较