在之前写过一篇Android 分享其他APP的内容之文本和图片:
点击打开链接,但是会有点小问题,比如说QQ浏览器分享过来的就是“image/*”类型,而不是“text/*”类型,而且QQ浏览器分享的还带着title ,那这个该怎么解决呢?
/**
* 获取图片 单张
* @param intent
*/
private void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
getRealPathFromURI(this,imageUri);
}
}
这种情况已经拿不到QQ浏览器的分享过来的图片了,修改如下:
/**
* 获取图片
* @param intent
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
String imagePath = null ;
final String scheme = imageUri.getScheme();
String data = null;
if ( scheme == null )
data = imageUri.getPath();
else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
ClipData clipData = (ClipData) intent.getClipData();
String sharedText = clipData.getItemAt(0).getText().toString();
imagePath = imageUri.getPath();
}else if( ContentResolver.SCHEME_CONTENT.equals( scheme ) )
{
if (imageUri != null) {
getRealPathFromURI(this,imageUri);
}
}
}
根据SCHEME 区分获取相应的path ,就不会出错了。
同样多图分享,也存在个别应用如ES 会把图片路径传到SCHEME_FILE 里,解决如下:
/**
* 多图分享
* @param intent
*/
private void handleSendMultipleImages(Intent intent) {
ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
String imagePath = null ;
if (imageUris != null) {
for (Uri image : imageUris) {
final String scheme = image.getScheme();
String data = null;
if ( scheme == null )
data = image.getPath();
else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
imagePath = image.getPath();
//String imagePath = clipData.
}if(ContentResolver.SCHEME_CONTENT.equals(scheme))
{
getRealPathFromURI(this,imageUri);
}
}
}
}
这样就不会有问题了。