android系统支持有一个应用中的内容分享到另一个应用中,典型的例子就是相册应用和微博微信这种应用的互动。如果某个应用的分享按钮调用的是系统的分享功能,可能会是如下画面:
看得出来,这个系统分享的应用列表是可以添加应用的,那么我们如何将我们自己的应用添加进去呢?那就得看我们想要分享的是什么类型了。
1.确定分享传输的数据类型。android支持的传递的类型可以参见这篇文章:Android把自己应用加入到系统文件分享中。如果是分享文本可以定义成text/*,而分享图片则可以是image/*。
2.确定应用要跳转的具体页面。一个应用可能有很多页面,另一个应用把数据传过来了,要那个页面去接受呢?这就需要与具体业务相结合了。确定好页面后,在AndroidManifest文件中相应的Activity中填入intent-filter,下面是个例子:
<activity android:name="com.sean.zq.android.view.share.ShareActivity">
<!-- 处理单张图片的Intent -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<!-- 处理多张图片的Intent -->
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
加上后,系统就知道了在分享图片类型时,需要带上你的应用。就像上面的图片一样,你的应用就会出现在列表中。需要注意的是,列表中图标下面的文案,是取的android:label的值,没有设置取的是应用名称。
3.Intent URI数据处理。
其他应用分享传过来的数据是以Intent的形式。这段不多说,直接上代码:
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
//自动裁剪出制定大小的图片显示在imageview上
ContentResolver contentProvider = getContentResolver();
Bitmap mBitmap = null;
try {
Bitmap bmp = BitmapFactory.decodeStream(contentProvider.openInputStream(imageUri));
mBitmap = Bitmap.createScaledBitmap(bmp, 100, 100, true);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
imageView.setImageBitmap(mBitmap);
}
上面这段代码是将图片转化成Bitmap,之后绘制在界面上,当然也可以转换成文件,然后读取绘制。
4.添加读或者写存储设备的权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
到这里,将应用添加到系统的分享列表中就完成了。但是还需要注意跳转的页面的业务逻辑。