系统分享
最近在做一个系统分享的功能,就是系统其他应用向本应用分享文字,图片视频等内容,下面是实现步骤:
一,给跳转的页面添加相应的intent-filter
在指定Activity添加相应的intent-filter后,该应用就会出现在系统分享的列表中。
<intent-filter android:label="@string/share_message" >
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/*" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="text/*" />
<data android:mimeType="video/*" />
<data android:mimeType="multipart/*" />
</intent-filter>
二,在跳转的Activity获取分享的内容
通过Intent获取分享的内容,以做相应的处理。
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/*".equals(type)) {
// 文本类型的分享
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
String sharedTitle = intent.getStringExtra(Intent.EXTRA_TITLE);
}
else if (type.startsWith("image")) {
// 图片类型的分享
Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (uri != null)
// 如果是浏览器是下面的路径storage/emulated/0/Android/data/com.android.browser/cache/share.jpg
// 如果是系统相册则是:content://......
String path = uri.getPath();
}
}
}
}else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
if (type.startsWith("image/")) {
// 多图片发送
ArrayList<Uri> uriLists = intent
.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
}
}
通过上面的两步就可以轻松的获取系统分享的内容,其它类型如视频,语音的分享也是类似的处理。
注意:
上面获取到的图片路径是以“file:// content://”等开头的路径不是图片的真是路径,如果以这个路径显示图片会出现问题。
解决办法:
获取到以content开头的Uri路径后,需要通过ContentResolver(managedQuery也可以)转换成真实路径:
// 通过Uri获取图库图片的真实路径
public String getRealPathFromURI(Uri contentUri) {
String res = null;
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(contentUri, proj, null,null, null);
if (cursor.moveToFirst()) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
return res;
}