近日在处理一个需求,外表看上去挺简单的,但是却搞了好久。
需求如下: App乙要更换新版本
App甲 A页面 -> App乙 B页面(判断APP是否升级,判断APP是否已经登录) -> App乙 B页面销毁 -> App乙 C页面 -> App乙 C页面做业务操作 -> App甲 A页面
正常来说,挺简单的,但是业务上有点复杂。先说App甲 ,,是一个混合开发,基本上可以理解为一个cordova+H5+vue的功能,所有调用外系统app使用cordova的插件。App乙的B页面,只是做鉴权用,而且B页面不能进行修改,使用后就立马销毁。App乙的C页面,可以修改。
有人说,从App乙 C页面做业务操作 -> App甲 A页面 不简单吗?一个finish就搞定了呀。笔者开头也是这样想的。结果发现,没返回值…… 什么情况呢?app甲已经用startActivityForResult去打开乙了呀,而App乙 C页面也是这样写
//把返回数据存入Intent
intent.putExtra("code", xxxx);
setResult(RESULT_OK, intent);
finish();
这就奇怪了,为什么呢?
好吧,由于时间要求,笔者在一边翻查资料的同时,思考其他方法。首先将需求抽象一下
目前的需求是A-B-C,但是B要销毁自己,并且C要直接返回A,且参数要带回去。
方法1: 用启动模式可以从C页面返回到A页面
方法2: B页面不finish, 在B页面做中转,用onActivityResult返回给A
方法3:在App乙 中指定包名类名,跳转到App甲,然后在intent中传参
方法4:找出原有方法不能传参的原因
方法5:用其他方法进行不同App间的参数传递
好吧,理清楚需求已经写好方法备案后,就可以着手测试了
方法1: 用启动模式可以从C页面返回到A页面,但是参数无法带回去,同原有方式一样(废弃)
方法2:用startActivityForResult 去实现,但是B页面需要finish,App乙的B页面不肯进行修改(废弃)
方法3:指定包名类名,跳转的方式,但是业务是在js端,跳转时候无法控制在原来页面上(废弃)
好吧,兜兜转转又回到原点,先查查资料吧。
2000 years later~~~
在A页面进行startActivityForResult打开B页面,其实是等待B页面的数据返回,B页面因为finish掉了,所以A页面无法获取返回。C页面的返回,其实是返回B,但是B中没有继续透传,因而导致数据丢失。
好吧,我45度仰天,深呼吸,深呼吸。由于App乙不肯改,我内心那一阵涟漪……
只剩下方法5了,用其他方式传参。有什么比较方便又建单直接的呢?这时,朋友在微信上发了个口令码,一堆火星文,然后粘贴到某宝里打开。 好吧,既然这么有缘,就用你吧,剪贴板。
App乙的C页面这样改造
Intent intent = new Intent();
//把返回数据存入Intent
intent.putExtra("code", "xixixixi");
setResult(RESULT_OK, intent);
//将intent保存到剪贴板里面
putTextIntoClip(ThirdActivity.this,intent);
finish();
这个也是有个问题,不会在界面A里面的onActivityResult里面获取到Intent或者剪贴板的数据。但是可以在程序的其他地方获取到。 WTF…… 什么情况? 这都要耍我?返回时候获取不了,不返回的时候又能获取到???
于是,再次查看资料……
2000 years later~~~
在某个网页中看见这么一句话
【android10中规定, 只有默认输入法(IME)或者是目前处于焦点的应用, 才能访问到剪贴板数据。】
………………来,谁开发的,出来一下,保证不打死你……
于是,延迟了个1秒,OK,问题解决……
最终,前端js不用修改,App乙不用大改,就是C页面进行写入剪贴板即可。而我…… 乍看上去改动不大,也就十几行代码。but,个中苦逼有谁懂……
相关推荐
### 柯迪亚克速派柯珞克合众北斗-9寸中控屏-安装第三方APP教程 #### 一、背景与目的 随着汽车智能化的发展,越来越多的车型配备了先进的中控屏幕,不仅可以提供导航、音乐播放等基本功能,还可以接入互联网服务,...
关于网络通信,项目可能采用了HTTP或HTTPS协议,通过Android的HttpURLConnection或者第三方库如Retrofit、Volley等与服务器进行数据交换。考虑到安全性和数据传输效率,JSON格式可能被用作数据交换的载体,因为它轻...
Android的HttpURLConnection或第三方库如Retrofit、OkHttp可方便地处理网络请求。 4. 消息推送:为了实时更新订单状态,可以使用Firebase Cloud Messaging(FCM)实现服务器向客户端推送消息。 服务器端开发同样...
这个项目可以帮助开发者学习如何利用Android的Bitmap类、Canvas和Paint对象来操作图像,以及如何利用第三方库如Picasso或Glide进行更高效、更复杂的图片加载和处理。此外,它还可能涉及OpenCV等高级图像处理库,这...
2. **安全共享**:Android 8.0引入了`Intent.FileProvider`,这是一个内置的FileProvider,允许应用安全地与第三方应用共享文件,防止因不正确的URI权限导致的安全问题。 3. **通用共享接口**:系统级别的共享接口...
2.2 第三方服务:市面上有如腾讯的VDF(Version Difference Format)和阿里的AndFix等第三方解决方案,它们提供成熟的增量更新框架,简化开发流程。 三、腾讯VDF方案 3.1 VDF概述:腾讯的VDF技术通过分析APK的Dex...
8. **第三方库支持**: 对于更复杂的跳转,如打开特定的应用商店页面,或者处理社交分享,可以借助第三方库,如DeepLinkKit或Branch.io,它们提供了一套完整的解决方案来简化实现。 9. **调试与测试**: 由于“程序...
- `Speedtest` 等第三方应用侧重于运营商提供的固定带宽测试,`iperf` 可以测试任何网络连接。 7. **注意事项** - `iperf` 的测试结果受设备硬件性能、网络环境、服务器负载等因素影响。 - 在公共 Wi-Fi 环境下...
Android的Notification API可以创建各种通知,而Firebase Cloud Messaging(FCM)或者极光推送等第三方服务可以实现远程消息推送。 最后,性能优化是必不可少的。包括内存管理、耗电优化、响应速度提升等,可以通过...
【信用监管App设计】本文介绍了第三方社会信用平台的信用监管App设计,旨在强化信用体系建设,提升公众参与度和监管力度。App设计遵循高效、规范、安全的原则,整合了移动通讯、GPS定位、二维码扫描和实时传输等技术...
- 第三方应用市场:除了Google Play,还有很多第三方AppMarket,如华为应用市场、小米应用商店等,它们有自己的分发规则和审核机制。 2. **AppMarket源码结构** - 用户界面:通常包括登录注册、搜索、分类、详情...
5. **编程实现**:在Android应用开发中,使用第三方库如UsbSerial(https://github.com/felHR85/UsbSerial)可以简化USB通信的实现。这个库为多种常见的USB串口芯片提供了封装好的API,包括Arduino常用的FTDI、CH340...
本教程将深入探讨如何在Unity3D中实现第三方登录,并与Android设备进行通信。 首先,理解Unity3D中的第三方登录流程。这通常涉及以下步骤: 1. **集成SDK**:你需要下载并集成第三方登录服务商提供的SDK到Unity...
这个压缩包"Android应用源码之第三方登录(新浪,腾讯。人人网).zip"包含了一个Android应用的源代码,该应用实现了通过新浪、腾讯和人人网这三家社交媒体平台进行第三方登录的功能。以下是对这些知识点的详细说明:...
随着3G、4G乃至5G移动网络的发展,Android手机打破了运营商的限制,提供了丰富的第三方应用开发环境。然而,开放性带来的安全挑战不容忽视。 首先,公共Wi-Fi的安全性是Android App的一个潜在风险。许多用户在登录...
6. **推送通知**:为了实现消息实时提醒,源码可能利用了Firebase Cloud Messaging (FCM) 或其他第三方推送服务,确保即使应用不在后台运行,用户也能接收到新消息的通知。 7. **权限管理**:Android 6.0及以上版本...
6. 支付集成:对接支付宝、微信等第三方支付SDK,实现安全快捷的在线支付功能。 二、服务端开发 1. 后端架构:通常采用RESTful API设计,提供HTTP接口供客户端调用。可选择Spring Boot、Django、Node.js等后端框架...
现在很多应用都会用到地图,但是我们肯定不想自己的app中还要弄个导航神马的,所以第三方的地图也为我们开辟了一条捷径,直接将数据传输到地图应用,让第三方的地图帮我们来做好这一切。现在比较流行的地图应用百度...
6. **支付集成**:集成第三方支付平台(如支付宝、微信支付),实现安全的在线支付功能,需考虑支付状态的同步和异常处理。 7. **地图API**:可能集成Google Maps API展示商家位置,进行导航指引。 8. **推送通知*...
`CheckVersionLib`是一个第三方库,用于检测服务器上的最新版本信息,并与本地应用版本进行比较。它的核心功能包括: 1. **获取远程版本信息**:库通过网络请求从服务器获取JSON或其他格式的版本更新信息,通常包括...