近日在处理一个需求,外表看上去挺简单的,但是却搞了好久。
需求如下: 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,个中苦逼有谁懂……
相关推荐
现在很多应用都会用到地图,但是我们肯定不想自己的app中还要弄个导航神马的,所以第三方的地图也为我们开辟了一条捷径,直接将数据传输到地图应用,让第三方的地图帮我们来做好这一切。现在比较流行的地图应用百度...
� 由于采用了 Java 作为应用开发语言,目前可用的传统第三方应用还很少,但由于 Android 是一款完全 开 源的移动计算平台,相信第三方应用会很快的丰富起来。 � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的...
第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18 3.2.2页面回退...
您的数据仅是您自己的数据,您应该选择存储位置,是否与第三方共享以及如何通过互联网传输。 除了计算机上之外,您的任何数据都不会存储在其他任何地方。没有可能受到合法或非法损害的中央服务器。所有通信都使用 ...
本人花了一周的时间写了个Wear OS工具箱,利用传统的ADB命令+Windows CMD 命令行原理。...可以做到给手表安装第三方平台APP,以及修改分辨率和修改DPI可以根据自己的喜好来给手表DIY。是搞机搞表一族的必备法宝。
- 两个平台的SDK,允许第三方移动应用程序的开发人员在其任务下自定义接口和功能。 - 以及非常简单的添加和管理新客户。识别是您使用的最方便,快速安全的第二个因素!建议使用移动应用程序使用 - 对于ios:...
3.网络上大部分聊天类APP是调用第三方平台插件, 没有独立数据库及后台,数据量大需要收费,且安全性得不到保障! 即时通讯,纯原生开发,各种功能应有尽有 支持加好友、消息私聊、消息群聊、朋友圈、红包、语音...
3.网络上大部分聊天类APP是调用第三方平台插件, 没有独立数据库及后台,数据量大需要收费,且安全性得不到保障! 即时通讯,纯原生开发,各种功能应有尽有 支持加好友、消息私聊、消息群聊、朋友圈、红包、语音...
事件触发时, 可执行Lua脚本, 发送电子邮件 或 执行第三方的应用程序. 负载均衡 & 高可用 可以使用Wing Gateway对WingFTP进行集群, 以满足高可用 (或者负载均衡) 的需求. Weblink & Upload link 方便地创建和分享...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...
同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...