第二篇、Android分享操作
1. 分享简单数据
向其他app发送检单数据
- Intent发送数据必须有actions,其他对应action的activity响应事件。通过Intent实现分享功能,而ActionBar可使用
ShareActionProvider
来快速实现分享功能。如下是使用Intent.createChooser实现分享功能的demo:
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,"Share to My friends");
如上,可以显示出多个选择框,列出可响应的分享社交App
分享二进制文件,需要指定特定的MIME类型,在EXTRA_STREAM里面放置数据的URI,如下分享一个图片的代码示例:
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);//重要,指定URI shareIntent.setType("image/jpeg");//指定MIME类型 startActivity(Intent.createChooser(shareIntent,"Share a picture");
注意:
- 可以使用
*/*
指定MIME类型,但是仅有能够处理一般数据类型的Activity才能匹配到。因为普通的Activity不能详尽所有MIME类型。 - 响应的Activity需要有访问URI的权限。两种方案,一是ContentProvider(per-URI permissions);二是MediaStore(亦可存储非媒体文件,Android3.0以后。)
- 可以使用
多块内容,Multiple。同时分享不同的内容,可使用
ACTION_SEND_MULTIPLE
及数据URIs。而MIME需根据内容类型调整,可使用*符号。如image/jpeg
、image/*
、*/*
。如下:ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(imageUri1); // Add your image URIs here imageUris.add(imageUri2); //接收Activity需要有权限哦 Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);//复合类型的MIME,Action shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);//传递数组 shareIntent.setType("image/*");//复合MIME startActivity(Intent.createChooser(shareIntent, "Share images to.."));
- Intent发送数据必须有actions,其他对应action的activity响应事件。通过Intent实现分享功能,而ActionBar可使用
接收外App传的数据
Activity 在manifest文件 配置,通过Intent Filters来过滤需要处理的数据Action,如下Activity接收单张图片、文本、多张图片时,不同的intent-filer配置:
<activity android:name=".ui.MyActivity" > <!-- 注释,单类型图片的Action过滤,其Action名称不同--> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <!-- 注释,文本类型的Action过滤--> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/p