像今日头条,网易新闻,我们如何才能分享其内容呢?本地的图库的图片,该如何拿到呢?
Android 提供了应用程序间的内容分享机制,这里只对分享其他应用的内容举例。
如果想要分享其他应用数据,首先要在manifest文件上注册,如下:
android:label="@string/friend"
android:icon="@mipmap/friend"
>
这里三个分别解释下:
代表数据源就一个,且数据类型是image。同理:
代表数据源就一个,数据类型是text(文本类型)。
从android.intent.action.SEND_MULTIPLE就可以看出,这个是可以分享多个数据的Image类型。
接收数据:
/**
* 接收数据
*/
private void intentSend() {
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);
} else if (type.startsWith("image/")) {
handleSendImage(intent);
// intent.get
}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
if (type.startsWith("image/")) {
handleSendMultipleImages(intent);
}
} else {
}
}
这里接收三个类型的数据,文本,单张图片,多张图片
1,文本
/**
* 分享文本
* @param intent
*/
private void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
String sharedTitle = intent.getStringExtra(Intent.EXTRA_TITLE);
if (sharedText != null) {
text.setText(sharedText);
}
}
这个比较简单,直接取出数据即可。
2,单张图片
/**
* 获取图片 单张
* @param intent
*/
private void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
getRealPathFromURI(this,imageUri);
}
}
拿出图片的URI 并且取出原图:
/**
* 通过Uri获取文件在本地存储的真实路径
* @param act
* @param contentUri
* @return
*/
public String getRealPathFromURI(Activity act, Uri contentUri) {
// can post image
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(contentUri, proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = 0;
if( cursor.moveToFirst())
{
column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
//一个TextView 展示
text.append(cursor.getString(column_index)+"\n");
}
return cursor.getString(column_index);
}3,多张图片
/**
* 多图分享
* @param intent
*/
private void handleSendMultipleImages(Intent intent) {
ArrayList imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageUris != null) {
for (Uri image : imageUris){
getRealPathFromURI(this,image);
}
}
}
多张图片无非就是拿到Uri 数组,然后便利获取其真实路径。