Android分享内容和接收分享内容小小实现
先来说说分享,毕竟没有分享何来接收分享可谈?
分享目前已实现的有两种方式:后台代码实现、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分享内容和接收分享内容小小实现的更多相关文章
- android 从其他app接收分享的内容
Receiving Content from Other Apps[从其他app接收分享的内容] 就像你的程序能够发送数据到其他程序一样,其他程序也能够简单的接收发送过来的数据.需要考虑的是用户与你的 ...
- Android中实现APP文本内容的分享发送与接收方法简述
谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...
- php框架tp3.2.3和js写的微信分享功能心得,分享的标题内容图片自定义
https://blog.csdn.net/weixin_42231483/article/details/81585322 最近用PHP的tp3.2.3框架和js写的微信分享功能心得,分享的标题内容 ...
- 利用 Android 系统原生 API 实现分享功能
利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...
- 【Android】安卓四大组件之内容提供者
[Android]安卓四大组件之内容提供者 1.关于内容提供者 1.1 什么是内容提供者 内容提供者就是contentProvider,作用有如下: 给多个应用提供数据 类似一个接口 可以和多个应用分 ...
- Android应用中实现系统“分享”接口
在android下各种文件管理器中,我们选择一个文件,点击分享可以看到弹出一些app供我们选择,这个是android系统分享功能,我们做的app也可以出现在这个列表中. 第一步:在Manifest.x ...
- android 微信朋友分享,朋友圈分享
android 微信朋友分享,朋友圈分享 包名必须写成 com.weixin WXEntryActivity package com.weixin.wxapi; import android.app ...
- Android调用微信登陆、分享、支付
前言:用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到也 ...
- android 学习随笔二十一(内容提供者 )
一.内容提供者* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的私有数据* 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查 ...
随机推荐
- 445. Add Two Numbers II 链表中的数字求和
[抄题]: You are given two non-empty linked lists representing two non-negative integers. The most sign ...
- 三次样条插值算法C++实现
三次样条插值算法 1 总体说明 三次样条插值算法是一种计算量和效果都比较理想的插值算法.关于三次样条插值算法的原理这里不做过多的解释,下面的代码是我在网上收集了两种C++实现版本的基础上自己整合的一个 ...
- 对hadoop namenode -format执行过程的探究
引言 本文出于一个疑问:hadoop namenode -format到底在我的linux系统里面做了些什么? 步骤 第1个文件bin/hadoop Hadoop脚本位于hadoop根目录下的bi ...
- 分布式锁三种实现方式(DB,redis,zookeeper)比较
先贴出看到的一篇博客,后续补充自己总结分析的. https://blog.csdn.net/u010963948/article/details/79006572
- Redhat/Centos6.x安装Chrome
由于Chrome对rhel6.x不在支持发布版本,只能安装chromium版本! 01.下载地址 http://people.centos.org/hughesjr/chromium/6/x86_64 ...
- 地址重写 No input file specified的解决方法
转载自:http://blog.csdn.net/williamsblog/article/details/37532737 (一)IIS Noinput file specified 方法一:改PH ...
- 【MySQL】-2 函数、分组、子查询、联合查询
函数 Mysql的函数特性没有SQL可移植性强. 大多数情况下支持的函数: 处理文本串的函数: RTrim():处理列值右边的空格 LTrim():处理列值左边的空格 Trim():处理列值的左右 ...
- 决策树模型组合之随机森林与GBDT(转)
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- windows 函数
数组清零 ::ZeroMemory(首地址,大小);
- modbus转乐鑫物联网平台上传工具
乐鑫平台推荐个人用户使用 界面比较简洁