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

分享目前已实现的有两种方式:后台代码实现、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、蓝牙等),并展示出来让我们选择,如下图

那用ShareActionProvider如何实现的呢,首先在菜单文件里添加一个item

<item android:id="@+id/share"
android:orderInCategory="200"
android:title="share"
android:icon="@android:drawable/ic_menu_share"
app:showAsAction="always"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

这里使用的是v7包下的ShareActionProvider,对应的后台代码里面也要用v7包下的类,需要注意的是app:actionProviderClass的前缀是app而不是android,如果写成android会报错并闪退。如果一切正常那么程序启动后应付在标题栏显示一个分享的图片,额,确切的说是图标,点击的后也会展示出能内容的程序,如下图

添加完毕在后台的代码里面也要设置要分享的内容的,不然程序怎么知道要分享什么呢

public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem item=menu.findItem(R.id.share);
ShareActionProvider sap= (ShareActionProvider) MenuItemCompat.getActionProvider(item);
Intent intent=new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"hi jiujie zhu,do u have lunch?");
if(sap!=null){
sap.setShareIntent(intent);
}
return true;
}

这里分享的是文本信息。

分享完毕就要接收,再来说说如何接收

接收其实挺简单的,至少比我想的简单(我是新手我自豪,咩嘿嘿~~~)

以接收图片为例,新建一个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。

Android分享内容和接收分享内容小小实现的更多相关文章

  1. android 从其他app接收分享的内容

    Receiving Content from Other Apps[从其他app接收分享的内容] 就像你的程序能够发送数据到其他程序一样,其他程序也能够简单的接收发送过来的数据.需要考虑的是用户与你的 ...

  2. Android中实现APP文本内容的分享发送与接收方法简述

    谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...

  3. php框架tp3.2.3和js写的微信分享功能心得,分享的标题内容图片自定义

    https://blog.csdn.net/weixin_42231483/article/details/81585322 最近用PHP的tp3.2.3框架和js写的微信分享功能心得,分享的标题内容 ...

  4. 利用 Android 系统原生 API 实现分享功能

    利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...

  5. 【Android】安卓四大组件之内容提供者

    [Android]安卓四大组件之内容提供者 1.关于内容提供者 1.1 什么是内容提供者 内容提供者就是contentProvider,作用有如下: 给多个应用提供数据 类似一个接口 可以和多个应用分 ...

  6. Android应用中实现系统“分享”接口

    在android下各种文件管理器中,我们选择一个文件,点击分享可以看到弹出一些app供我们选择,这个是android系统分享功能,我们做的app也可以出现在这个列表中. 第一步:在Manifest.x ...

  7. android 微信朋友分享,朋友圈分享

    android 微信朋友分享,朋友圈分享 包名必须写成  com.weixin WXEntryActivity package com.weixin.wxapi; import android.app ...

  8. Android调用微信登陆、分享、支付

    前言:用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到也 ...

  9. android 学习随笔二十一(内容提供者 )

    一.内容提供者* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的私有数据* 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查 ...

随机推荐

  1. Swagger注解

    swagger注解说明  1.与模型相关的注解,用在bean上面 @ApiModel:用在bean上,对模型类做注释: @ApiModelProperty:用在属性上,对属性做注释 2.与接口相关的注 ...

  2. poj 1639 最小k度限制生成树

    题目链接:https://vjudge.net/problem 题意: 给各位看一下题意,算法详解看下面大佬博客吧,写的很好. 参考博客:最小k度限制生成树 - chty - 博客园  https:/ ...

  3. Failed to resolve:com.android.support:appcompat-v7:报错处理

    既然是版本问题,那就的先去了解自己的电脑安装的SDK工具版本,点开SDK Manager图标,然后选中Updates就可以看到了 这里我的 sdk 工具版本就是26.1.1了 报错是因为自己的andr ...

  4. 698. Partition to K Equal Sum Subsets 数组分成和相同的k组

    [抄题]: Given an array of integers nums and a positive integer k, find whether it's possible to divide ...

  5. AndFix注意事项

    1.生成补丁,修改前后的apk包都必须签名. 2.AndFix 不支持修改布局文件. 3.文件的路径必须正确. 4.AndFix 不支持添加匿名内部类(就是点击事件). 5.AndFix 不支持添加新 ...

  6. Git-git push -u为何第二次不用指定-u?

    1,如果当前分支只有一个追踪分支,那么主机名都可以省略,如:git push origin 将当前分支推送到origin主机的对应分支 2,$ git push 如果当前分支与多个主机存在追踪关系,那 ...

  7. Heartbleed心脏出血漏洞原理分析

    Heartbleed心脏出血漏洞原理分析 2017年01月14日 18:14:25 阅读数:2718 1. 概述    OpenSSL在实现TLS和DTLS的心跳处理逻辑时,存在编码缺陷.OpenSS ...

  8. 安装配置python环境,并跑一个推荐系统的例子

    1.官网下载python2.7,安装完后,在环境变量Path中加上这个路径 在控制台输入python,出现版本信息,就成功了. 2.我使用的是 pycharm,注册后,在 把自己的python.exe ...

  9. boost asio 学习(一)io_service的基础

    原文  http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio/ 编译环境 b ...

  10. loadtxt()函数的糟心历程

    原计划:导入一个csv文件,然后算出平均值 import numpy as np c=np.loadtxt('d:\python36\data.csv', delimiter=',', usecols ...