Android学习 - 使用及实现系统分享接口
2015-06-03 14:12
726 查看
为了应用的推广、传播,很多的应用中都有“分享”功能,一个按钮,点击后会出现短信、微博等等。一切实现了分享功能的应用列表。这一篇文章主要介绍怎么调用分享功能和怎么实现分享接口让自己应用出现分享列表中。Android应用中能很方便的完成这些功能,这也正是Android的伟大之处,他能很简单的完成应用之间的沟通以相互整合。
调用分享功能
1、分享文本
分享功能使用的隐式启动Activity的方法,这里的Action使用的是
2、改变分享列表标题
使用上面的分享方式分享列表标题为“使用一下内容完成操作”,Android中提供了
使用Intent.createChooser()的好处:
If you call
Even if the user has previously selecteda default action for this intent, the chooser will still be displayed.
If no applications match, Android displaysa system message.
You can specify a title for the chooserdialog.
分享功能不只是Intent.EXTRA_TEXT,还可以
3、分享图片
分享功能还支持二进制内容(BinaryContent),但是多数是处理的图片,因为shareIntent.setType("image/jpeg")这一项设置了内容类型。可也以是其他类型,需要接受方支持。
4、分享图片列表
分享功能不仅支持单张图片,还支持图片列表,这里还是说的范围太窄了,应该声明不仅仅是图片。
实现分享功能
上面说的都是怎么调用分享功能,以下就开始写怎么实现分享功能,让我们的应用也出现在分享列表中。前面也说了分享功能是使用隐式调用Activtiy实现的,Activity需要声明
声明intent-filter
上面声明了三种intent-filter,当然可以更多,这里只是举个例子,
处理接收数据
声明了intent-filter,响应的Activity就要处理响应的数据,示例如下:
通过声明intent-filter,处理接受到的数据就能完成分享的接收功能。
调用分享功能
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 call
Intent.createChooser()for the intent, Android will always display the chooser. This hassome advantages:
Even if the user has previously selecteda default action for this intent, the chooser will still be displayed.
If no applications match, Android displaysa system message.
You can specify a title for the chooserdialog.
分享功能不只是Intent.EXTRA_TEXT,还可以
EXTRA_EMAIL
、EXTRA_CC、
EXTRA_BCC
、EXTRA_SUBJECT,只需要接受方完成响应数据接受。
3、分享图片
分享功能还支持二进制内容(BinaryContent),但是多数是处理的图片,因为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
<activity android: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 { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // Get intent, action and 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); // 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<code></code> } } 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消息机制
- 【译文】 Android媒体相关开发应用程序接口
- Android5.0_camera2Api
- android中xml tools属性详解
- Android 屏幕适配方案
- Error:android.content.res.Resources$NotFoundException: String resource ID #0x1
- Android中TextView首行缩进处理办法
- Android添加新的视频格式--媒体库扫描
- Android学习 - 触摸及手势操作
- Android Design Support Library最新组件
- Android项目打第三方jar包
- AndroidManifest.xml——文件详解(二)
- 平安科技移动开发二队技术周报(第五期)
- android 设置控件的透明度
- 启动Android程序:unable to start service Intent {act = com.android.email.ACCOUNT_INTENT}
- Android设计模式系列--观察者模式
- Android 5.0 呼叫流程--呼出
- Android中常用的位图操作(View与Bitmap转化、圆角、灰化、提取Alpha、旋转、倒影、剪切……)
- To show image on Android
- Android跳转照相机并存储照片