前言

发布会是从一半开始看的,但是我没错过两个东西 Big Bang 和 OneStep,这两个东西从技术角度实现并不是什么难事,只主要的就是龙哥的创意,让人佩服不已,佩服不已,佩服不已。

本文重点

  • 如何实现OneStep
  • 遇到content:// 的图片怎么处理
  • Uri 的构成

实现OneStep

首先我们先分析一下OneStep ,OneStep 实际上就是分享,包括文字和图片,只不过龙哥把他弄得更加简单炫酷了一点,分享其实安卓是提供了这样的接口的。

AndroidManifest.xml中的activity标签中添加如下代码

<!--接收文字-->
<intent-filter><action android:name="android.intent.action.SEND" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="text/plain" />
</intent-filter>
<!--接收单个图片-->
<intent-filter><action android:name="android.intent.action.SEND" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="image/*" />
</intent-filter>
<!--接收多个图片-->
<intent-filter><action android:name="android.intent.action.SEND_MULTIPLE" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="image/*" />
</intent-filter>

这个其实就是我们都知道的意图拦截器的配置,其中的意思就是 action: 行为是SEND/SEND_MULTIPLE nimeType: 接收类型

在onCreate中接收并处理数据。

Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();if (Intent.ACTION_SEND.equals(action) && type != null) {if ("text/plain".equals(type)) {//文字String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);if (sharedText != null) {todo:// 处理文字}} else if (type.startsWith("image/")) {//单张图片和文字String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);if (sharedText != null) {todo:// 处理文字}Uri imageUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);todo:// 处理图片路径}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {//多张图片if (type.startsWith("image/")) {ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);for (Uri uri : imageUris) {todo:// 处理图片路径}}
}

到这里就基本算是完事了,我们先看一下效果

由于Gif图片太大点击这里查看

这里为什么没有这个App的Icon呢,说好的分享呢?其实除了系统应用和微信 社交应用默认是开启的之外,其他app是关闭的,需要开启一下,看到那个锤子便签上面的那个设置按钮了吗?点击一下看到如下图(这是锤子截屏,设置中添加的外壳),打开开关就可以了

看一下此时的效果

由于Gif图片太大点击这里查看

小结

到这里我们的OneStep 已经实现了,其实就是Google 的分享接口,我们首先需要在AndroidManifest 中的activity中添加意图拦截器,然后再对应的Activity 去处理接收的数据。

content:// Uri path的处理

如果你是从相册分享的图片,有时候会遇到Uri的path是一个’content://’ 而不是’file://’ ,这就是我们通常所说的ContentProvider(内容提供者) ,这个时候加入我们需要实现发朋友圈的功能,你就需要处理后,new 出一个File 然后吧啦吧啦一大堆,传给服务器啦,这块就是我们需要处理的一个细节,所以就不多说了,上代码了,看不懂的直接留言回复就ok。

/*** url转为FilePath** @param imageUri Uri* @return 返回最终文件的实际路径*/private String UriToFilePath(Uri imageUri) {if (imageUri != null) {String imagePath = imageUri.getPath();if (ContentResolver.SCHEME_CONTENT.equals(imageUri.getScheme())) {imagePath = getStringPathFromURI(this, imageUri);}return imagePath;}return null;}/*** 从ContentResolver 中或得到文件的实际地址** @param context    上下文* @param contentUri Uri* @return 返回最终文件的实际路径*/public String getStringPathFromURI(Context context, Uri contentUri) {Cursor cursor = null;try {String[] proj = {MediaStore.Images.Media.DATA};cursor = context.getContentResolver().query(contentUri, proj, null, null, null);if (cursor != null) {int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();return cursor.getString(column_index);}} finally {if (cursor != null) {cursor.close();}}return null;}

Uri 的结构

这里也不多说,应为相关的文章和官方的介绍都非常的详细了,贴别提醒大家,我们在new Intent后,我们拿到Intent对象直接setData()或者getData()的时候就是Uri

[scheme:]scheme-specific-part[#fragment]
[scheme:][//authority][path][?query][#fragment]
[scheme:][//host:port][path][?query][#fragment]

在拿到Uri的时候我们可以使用 getPath() 拿到传过来的路径,使用getScheme() Uri的类型,是file://还是content:// 判断一下然后做处理就可以了。

其他手机也是支持的(只是OneStep 快捷)也就是分享,看下图

源码欢迎Star

相关文章

https://developer.android.com/training/sharing/index.html

https://developer.android.com/reference/java/net/URI.html

/*** --------------* 欢迎转载   |  转载请注明* --------------* 如果对你有帮助,请点击|顶|* --------------* 请保持谦逊 | 你会走的更远* --------------* @author zsl* @github https://github.com/yy1300326388* @blog http://blog.csdn.net/yy1300326388* @email zhengsonglan001@gmail.com*/

有任何问题请加个人微信

1分钟让你的App 适配 锤子OneStep相关推荐

  1. 朱海舟宣布新一批应用已经适配锤子TNT 网友:救救海舟

    锤子科技此前爆发的种种,让罗永浩以及锤子员工都无奈成为众矢之的.在聊天宝再一次负面迭出时,锤子的未来还能有多久,成为了不是很有悬念的问题. 此时此刻,大批网友在微博高呼:"救救海舟" ...

  2. Android 系统(156)----Android APP适配全面屏手机的技术要点

    为了更好的阅读体验,可以转到我的个人站点:Windy'Journal 目录 目录 关于全面屏 更大的屏幕高宽比例 在AndroidManifest.xml声明max_aspect值 更换部分被拉伸的图 ...

  3. Android 9 P静默安装/卸载App适配终极指南

          Android 9 (P)静默安装/卸载App适配终极指南 Android 9 (P)开发适配指南系列博客目录: Adnroid 9 (P) recovery升级Map of '@/cac ...

  4. 教你如何升级app适配iOS 7

    开始工作 在这篇教程中,我们会将一个为iOS 6设计的app<Treasure Hunt>升级适配iOS 7. Treasure Hunt是一个社交应用,允许用户分享藏宝图,用户们可以沉浸 ...

  5. 一分钟搞定触手app主页酷炫滑动切换效果

    代码地址如下: http://www.demodashi.com/demo/12826.html 前言: 前几天在看手机直播的时候,自己就用上了触手app.一进到主页就看上了里面页面切换的效果,自己想 ...

  6. 5分钟搞定物联网 App —— 温湿度传感器 + 4路继电器

    5分钟搞定物联网 App -- 温湿度传感器 + 4路继电器 前边的视频我们分享 Modbus 设备通过 DTU 快速接入 ThingsCloud 云平台后,通过 Modbus 云网关对应到了独立的设 ...

  7. Android APP适配全面屏手机的技术要点-转载

    Android APP适配全面屏手机的技术要点  Windy_816 关注 2018.02.07 21:27* 字数 4010 阅读 5440评论 7喜欢 23 转载-来源 :https://www. ...

  8. App适配iPhone 6/ Plus和iOS 8:10条小秘诀

    http://www.cocoachina.com/ios/20150108/10864.html (原文:raywenderlich 作者:Jack Wu 译者:@TurtleFromMars) 过 ...

  9. Android APP适配全面屏手机的技术要点

    为了更好的阅读体验,可以转到我的个人站点:Windy'Journal 欢迎关注个人技术号:Android葵花宝典 获取最新的Android高级进阶知识点,以及Android逆向方法. 关于全面屏 全面 ...

  10. Android P的APP适配总结,让你快人一步

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ音乐技术团队发表于云+社区专栏 上篇:Android P 行为变更适配 Android P 这次有很多行为变更,其中不乏一些需要亟 ...

最新文章

  1. 基于Nexys4DDR的UART实验
  2. Jquery使用$.Post方法,本地可以,服务器错误的处理方法...
  3. 开源、高质量QR码多语言生成库
  4. 利用元数据管理数据质量
  5. flex file 文件上传 带参数 php,php+flex打造多文件带进度超级上传
  6. 电商培训有用是有前置条件的
  7. python玩王者荣耀皮肤碎片怎么获得_教你用Python代码免费获取王者荣耀全英雄皮肤...
  8. Apache Spark源码走读之22 -- 浅谈mllib中线性回归的算法实现
  9. Android之MVC模式
  10. mysql5.5编译安装_mysql5.5编译安装及配置
  11. qt android 悬浮窗,Qt悬浮窗实现
  12. ECharts绘制中国地图、广西地图
  13. 基于android平台的感光设计,基于Android手机摄像头的可见光通信技术研究
  14. MySQL GROUP_CONCAT()函数的排序方法
  15. 论文阅读|《面向多目标柔性作业车间调度的强化学习NSGA-Ⅱ算法》
  16. v2订阅一键同步自定义混淆
  17. PCB的分类以及它的制造工艺
  18. 上海人设提示访问接口出错
  19. Java并发23:Atomic系列-普通原子类型AtomicXxxx学习笔记
  20. 【爬虫搜索引擎工程师,360buy京东商城(集团总部技术系统)】前程无忧官方招聘网站...

热门文章

  1. 解决waiting for all target devices to come online卡住不动、长时间不加载的情况
  2. 未能加载文件或程序集“FastReport
  3. 网易数帆王佰平:我的 Envoy Maintainer 之路
  4. php是什么水处理药剂,国内目前最主要水处理药剂分类及特点
  5. android 微信跨境支付,微信跨境支付已在超过49个境外国家和地区合规接入
  6. 西游记中金箍棒的来历和巨大威力
  7. WordPress SEO优化:纯代码添加canonical标签
  8. 扫码点餐小程序源码_做个扫码点餐的小程序贵吗?
  9. cba比赛比分预测_cba盘口分析
  10. 赶紧用微信查询一下你的身份证,是否有人盗用你信息!