Android系统分享

系统分享

最近在做一个系统分享的功能,就是系统其他应用向本应用分享文字,图片视频等内容,下面是实现步骤:

一,给跳转的页面添加相应的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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值