Android 分享操作(1)------分享数据
一.分享数据
分享文本数据:
ACTION_SEND最直接常用的地方是从一个Activity发送文本内容到另外一个Activity。例如,Android内置的浏览器可以将当前显示页面的URL作为文本内容分享到其他程序。这一功能对于通过邮件或者社交网络来分享文章或者网址给好友而言是非常有用的。
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);
如果为intent调用了Intent.createChooser(),那么Android总是会显示可供选择。这样有一些好处:
- 即使用户之前为这个intent设置了默认的action,选择界面还是会被显示。
- 如果没有匹配的程序,Android会显示系统信息。
- 我们可以指定选择界面的标题。
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));
效果图如下:
分享二进制文件
分享二进制文件(如图片)也是类似的:分享二进制的数据需要结合设置特定的MIME类型,需要在
EXTRA_STREAM`里面放置数据的URI,下面有个分享图片的例子,该例子也可以修改用于分享任何类型的二进制数据:
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));
发送多块内容(Send Multiple Pieces of Content)
为了同时分享多种不同类型的内容,需要使用ACTION_SEND_MULTIPLE
与指定到那些数据的URIs列表。MIME类型会根据分享的混合内容而不同。例如,如果分享3张JPEG的图片,那么MIME类型仍然是image/jpeg
。如果是不同图片格式的话,应该是用image/*
来匹配那些可以接收任何图片类型的activity。如果需要分享多种不同类型的数据,可以使用*/*
来表示MIME。像前面描述的那样,这取决于那些接收的程序解析并处理我们的数据。需要保证有URL的访问权限。
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.."));
二.接收数据
1.更新我们的manifest文件
主要是设置intent fliters来告诉系统愿意接收那些数据。
2.处理接受到的数据
数据通过Intent传输,所以通过调用getIntent()方法来获取到Intent对象。拿到这个对象后,我们可以对其中面的数据进行判断,从而决定下一步行为。
void onCreate (Bundle 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)) { // Handle text being sent } else if (type.startsWith("image/")) { // Handle single image being sent } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { // Handle multiple images being sent } } else { // Handle other intents, such as being started from the home screen } ... }