现在用的比较多的都是三方的分享,其实安卓自带的就有简单的分享。

在构建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分享操作相关推荐

  1. android intent调用,Android Intent调用 Uri的方法总结

    Android Intent调用 Uri的方法总结 //调用浏览器 Uri uri = Uri.parse(""); Intent it = new Intent(Intent.A ...

  2. android intent例程,Android开发(四)| 探究活动(详解Intent+大量实例)

    在Android的开发项目中,Activity(活动)是最容易吸引到用户的地方,因为相比于算法.架构,它是实际可见的. Activity是一个可以包含用户界面的组件,主要用于和用户进行交互.一个用户程 ...

  3. android 焦点分发,Android TV 焦点分发原理解析

    前言 相信很多刚接触AndroidTV开发的开发者,都会被各种焦点问题给折磨的不行.不管是学技术还是学习其他知识,都要学习和理解其中原理,碰到问题我们才能得心应手.下面就来探一探Android的焦点分 ...

  4. android intent actionview,android – 检查Intent.ACTION_VIEW上的用户操作

    正如Android Developer在 Activities上所写 In other protocols (such as ACTION_MAIN or ACTION_VIEW), you may ...

  5. Android 布局生成图片 做分享操作

    Android布局生成分享图片代码实例(含最新demo) - 黑帅-quan - 博客园

  6. 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 ...

  7. android intent拍照,Android通过Intent方式调用相机拍照取得图片

    Android通过Intent方式调用相机拍照取得图片 AndroidManifest.XML 权限设置: XML布局设置: 代码: public classMainActivityextendsAp ...

  8. android intent包装,Android 中的 Intent

    Intent 的作用 Intent 的作用 主要作为启动以及连接 Activity. Service 或是 BroadcastReceiver 的桥梁. context.startActivity(a ...

  9. android intent 导航,Android 通过Intent调取导航

    if (isAvilible(context, "com.autonavi.minimap")) { try{ intent = Intent.getIntent("an ...

最新文章

  1. 老男孩IT教育在线3期新学员司毅的计算机的基础知识
  2. OpenCV中导向滤波介绍与应用
  3. Jmeter加Fiddler对web项目测试
  4. 知识归纳,程序猿必备的21张(神经网络、线性代数、可视化等)数据挖掘速查表
  5. poj 3680 Intervals(离散化+费用流)
  6. TensorFlow2-卷积神经网络
  7. oracle 运营维护_oracle运维(持续更新)
  8. mysql生产环境加索引_【生产篇】_MySQL环境下如何查看基于表的索引定义
  9. C语言课后习题(59)
  10. Linux系统管理-(12)-网络配置IP命令
  11. windows10+ubuntu16.04双系统搭建
  12. silverlight下多线程处理
  13. Asp.Net中获取 字符串中中英字符的长度
  14. Audio -- Music Playback 框图
  15. ASCII码转HEX与HEX转ASCII码
  16. 编程界的修仙秘籍《JavaScript》百炼成仙第1章
  17. 分类问题中的几个衡量指标
  18. 字节跳动岗位薪酬体系曝光,看完感叹:我酸了
  19. 机器学习的几种学习方式
  20. Manajro17配置

热门文章

  1. 微信小程序登录-利用Oenid实现白名单和黑名单
  2. 60万元奖金 “人脸攻防战”,怎么打?丨独家公开课实录(附baseline)
  3. pandas中to_csv()和read_csv()参数详解
  4. mysql错误修改数据_使用正则表达式快速修改mysql中错误的varchar类型数据
  5. 堆晶结构_内蒙古苏尼特左旗地区堆晶角闪辉长岩的发现及地质意义
  6. php常用操作数组函数,PHP自带的几个实用的数组函数
  7. Eureka出现Root name ‘timestamp‘ does not match expected (‘instance‘) for type xxx的错误,如何解决?
  8. SpringMVC-自定义转换器
  9. LeetCode 17 电话号码的字母组合
  10. 信任与信誉对电子服务的重要性