分享内容和接收分享内容

先来说说分享,毕竟没有分享何来接收分享可谈?

分享目前已实现的有两种方式:后台代码实现、ShareActionProvider实现,接着先说通过代码实现

Intent intent=new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("/storage/emulated/0/Pictures/145.jpg"));
startActivity(Intent.createChooser(intent,"share this image to..."));    

这里分享的是图片,图片以二进制的形式进行传递,所以用Intent.EXTRA_STREAM来标志附加的消息类型。

如果是文字的话原理是一样的,只需将Type和附加信息改成如下即可

intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"hello world");

这们就简单实现了内容分享,点击要分享的内容系统就会自动帮我们寻找实现了接收内容的程序(微信、QQ、蓝牙等),并展示出来让我们选择。

分享完毕就要接收,再来说说如何接收
以接收图片为例,新建一个Activity,在清单文件里面设置action、data、category即可,怎么跟接收器有点像呢,看代码

<intent-filter>
       <action android:name="android.intent.action.SEND"/>
       <category android:name="android.intent.category.DEFAULT"/>
       <data android:mimeType="image/*"/>
</intent-filter>

data表示接收的文件类型,如果是文本类型的是不会接收的。这样进行标注后再分享内容时系统就会识别咱们的程序并展示给用户选择了,请看第二张图里面的ReceiveSharedContentAcitvity,这个就是自定义的接收内容的Activity,就这么简单啊。

光能接收并没用,关键是如何获取分享的内容和如何处理接收到的内容

private void handleImage(){
        Intent intent=getIntent();
        String action=intent.getAction();
        String type=intent.getType();
        if(action.equals(Intent.ACTION_SEND)&&type.equals("image/*")){
            Uri uri=intent.getParcelableExtra(Intent.EXTRA_STREAM);
            //接收多张图片
       //ArrayList<Uri> uris=intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
            if(uri!=null ){
                try {
                    FileInputStream fileInputStream=new FileInputStream(uri.getPath());
                    Bitmap bitmap= BitmapFactory.decodeStream(fileInputStream);
                    imageView.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    }

通过getIntent方法获取到包含分享内容的Intent,然后就可以获取里面的内容了。这是说明一点的是如果你分享的图片是在sd卡的话,请给程序添加读取sd卡的权限,不然会显示permission denied

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

上面说的都是分享一条文本或图片,如果要多个呢,一样的!只需在分享时用ArratList进行封装就行了,对于接收者来说,需要把action改成

<action android:name="android.intent.action.SEND_MULTIPLEND"/>

表示接收多个内容,在代码里面从Intent中获取内容时用getParcelableArrayListExtra而不是getParcelableExtra。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值