android intent 分发,Android分享操作
现在用的比较多的都是三方的分享,其实安卓自带的就有简单的分享。
在构建Intent时,可以指定这个Intent需要触发的actions。比如ACTION_SEND,该action表明该intent用于从一个activity发送数据到另外一个activity的,甚至可以跨进程之间的数据发送。系统会自动识别出能够兼容接受的这些数据的activity。如果这些选择有多个,则把这些activity显示给用户进行选择;如果只有一个,则立即启动该Activity。
分享数据
分享简单的数据
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,"This is my text to send");
sendIntent.setType("text/plain");
startActivity(sendIntent);
在不同的程序之间使用intent收发数据是在社交分享内容时最常用的方法。
若有多个匹配的程序,则系统会把他们都给筛选出来,并呈现Dialog给用户进行选择。
如果设备上安装有某个能够匹配ACTION_SEND且MIME类型为text/plain的程序,则Android系统会立即执行它。
不过为intent调用了Intent.createChooser(),那么Android总是会显示可供选择:
startActivity(Intent.createChooser(sendIntent,getResources().getText(R.string.send_to)));
看下显示效果:
image.png
image.png
image.png
分享图片
如果想要分享图片不是文字的话,首先得将setType设置成“image/jpeg”,如果不确定图片类型直接使用"image/*,同时数据需要结合设置特定的MIME类型,EXTRA_STREAM里面放置数据的URI。
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, mCroppedImageFile.getPath());
sendIntent.setType("image/");
startActivity(Intent.createChooser(sendIntent, "分享"));
image.png
image.png
image.png
分享多种类型数据
如果分享3张JPEG的图片,那么MIME类型仍然是image/jpeg。如果是不同图片格式的话,应该是用image/来匹配那些可以接收任何图片类型的activity。如果需要分享多种不同类型的数据,可以使用/*来表示MIME。
一次分享多张图片
ArrayList imageUris = new ArrayList<>();
imageUris.add(Uri.fromFile(mCroppedImageFile));
imageUris.add(Uri.fromFile(mCroppedImageFile));
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
sendIntent.putExtra(Intent.EXTRA_STREAM, imageUris);
sendIntent.setType("image/*");
startActivity(Intent.createChooser(sendIntent, "分享"));
可以看到同时分发了2张图片:
image.png
接收从其他App传送来的数据
让自己的app可以接受数据
Intent filters告诉Android系统一个程序愿意接受的数据类型。
android:name=".MainActivity"
android:theme="@style/CustomActionBarTheme">
上面将当前app的MainActivity可以接受文字。然后我们用另外一个app来分享文字:
image.png
上图中的TraningApp就是我自己定义能接受文字分享的app
处理接受到的数据
为了处理从Intent带来的数据,可以通过调用getIntent()方法来获取到Intent对象。拿到这个对象后,我们可以对其中面的数据进行判断,从而决定下一步行为。
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action)){
if ("text/plain".equals(type)){
Log.e(TAG, "ACTION_SEND:"+intent.getStringExtra(Intent.EXTRA_TEXT) );
}
}
然后发送消息:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "测试文字");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, "分享"));
查看log日志:
07-26 12:32:51.315 9746-9746/com.example.frc.trainingapp E/MainActivity: ACTION_SEND:测试文字
同样我们可以添加图片的处理:
if (Intent.ACTION_SEND.equals(action)) {
if ("text/plain".equals(type)) {
Log.e(TAG, "ACTION_SEND:" + intent.getStringExtra(Intent.EXTRA_TEXT));
} else if ("image/*".equals(type)) {
Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
Log.e(TAG, "ACTION_SEND_URI:"+uri.toString());
}
}
查看Log日志:
07-26 14:09:37.135 30944-30944/com.yanxiu.yxsanke_android E/SK::: /storage/emulated/0/YXSanKe_Android/res/nnnn.jpg
note:需要注意的是处理发送过来的数据可能会是耗时操作,建议不要在UI线程进行
android intent 分发,Android分享操作相关推荐
- android intent调用,Android Intent调用 Uri的方法总结
Android Intent调用 Uri的方法总结 //调用浏览器 Uri uri = Uri.parse(""); Intent it = new Intent(Intent.A ...
- android intent例程,Android开发(四)| 探究活动(详解Intent+大量实例)
在Android的开发项目中,Activity(活动)是最容易吸引到用户的地方,因为相比于算法.架构,它是实际可见的. Activity是一个可以包含用户界面的组件,主要用于和用户进行交互.一个用户程 ...
- android 焦点分发,Android TV 焦点分发原理解析
前言 相信很多刚接触AndroidTV开发的开发者,都会被各种焦点问题给折磨的不行.不管是学技术还是学习其他知识,都要学习和理解其中原理,碰到问题我们才能得心应手.下面就来探一探Android的焦点分 ...
- android intent actionview,android – 检查Intent.ACTION_VIEW上的用户操作
正如Android Developer在 Activities上所写 In other protocols (such as ACTION_MAIN or ACTION_VIEW), you may ...
- Android 布局生成图片 做分享操作
Android布局生成分享图片代码实例(含最新demo) - 黑帅-quan - 博客园
- android intent email,Android Email Intent
问题 I've set up two buttons. One opens the compose sms intent and the other opens the compose email i ...
- android intent拍照,Android通过Intent方式调用相机拍照取得图片
Android通过Intent方式调用相机拍照取得图片 AndroidManifest.XML 权限设置: XML布局设置: 代码: public classMainActivityextendsAp ...
- android intent包装,Android 中的 Intent
Intent 的作用 Intent 的作用 主要作为启动以及连接 Activity. Service 或是 BroadcastReceiver 的桥梁. context.startActivity(a ...
- android intent 导航,Android 通过Intent调取导航
if (isAvilible(context, "com.autonavi.minimap")) { try{ intent = Intent.getIntent("an ...
最新文章
- 老男孩IT教育在线3期新学员司毅的计算机的基础知识
- OpenCV中导向滤波介绍与应用
- Jmeter加Fiddler对web项目测试
- 知识归纳,程序猿必备的21张(神经网络、线性代数、可视化等)数据挖掘速查表
- poj 3680 Intervals(离散化+费用流)
- TensorFlow2-卷积神经网络
- oracle 运营维护_oracle运维(持续更新)
- mysql生产环境加索引_【生产篇】_MySQL环境下如何查看基于表的索引定义
- C语言课后习题(59)
- Linux系统管理-(12)-网络配置IP命令
- windows10+ubuntu16.04双系统搭建
- silverlight下多线程处理
- Asp.Net中获取 字符串中中英字符的长度
- Audio -- Music Playback 框图
- ASCII码转HEX与HEX转ASCII码
- 编程界的修仙秘籍《JavaScript》百炼成仙第1章
- 分类问题中的几个衡量指标
- 字节跳动岗位薪酬体系曝光,看完感叹:我酸了
- 机器学习的几种学习方式
- Manajro17配置
热门文章
- 微信小程序登录-利用Oenid实现白名单和黑名单
- 60万元奖金 “人脸攻防战”,怎么打?丨独家公开课实录(附baseline)
- pandas中to_csv()和read_csv()参数详解
- mysql错误修改数据_使用正则表达式快速修改mysql中错误的varchar类型数据
- 堆晶结构_内蒙古苏尼特左旗地区堆晶角闪辉长岩的发现及地质意义
- php常用操作数组函数,PHP自带的几个实用的数组函数
- Eureka出现Root name ‘timestamp‘ does not match expected (‘instance‘) for type xxx的错误,如何解决?
- SpringMVC-自定义转换器
- LeetCode 17 电话号码的字母组合
- 信任与信誉对电子服务的重要性