`

Android从第三方App返回的数据传输

阅读更多

 近日在处理一个需求,外表看上去挺简单的,但是却搞了好久。

需求如下: 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,个中苦逼有谁懂……

 

 

 

 

0
0
分享到:
评论

相关推荐

    android判断手机是否安装地图应用实现跳转到该地图应用

    现在很多应用都会用到地图,但是我们肯定不想自己的app中还要弄个导航神马的,所以第三方的地图也为我们开辟了一条捷径,直接将数据传输到地图应用,让第三方的地图帮我们来做好这一切。现在比较流行的地图应用百度...

    新版Android开发教程.rar

    � 由于采用了 Java 作为应用开发语言,目前可用的传统第三方应用还很少,但由于 Android 是一款完全 开 源的移动计算平台,相信第三方应用会很快的丰富起来。 � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    第三章 跨域交互缓存处理设计 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页面回退...

    安卓应用数据同步应用(通信使用 TLS 进行保护)APP完整项目代码

    您的数据仅是您自己的数据,您应该选择存储位置,是否与第三方共享以及如何通过互联网传输。 除了计算机上之外,您的任何数据都不会存储在其他任何地方。没有可能受到合法或非法损害的中央服务器。所有通信都使用 ...

    Wear OS ADB工具箱 V2.4.0.zip

    本人花了一周的时间写了个Wear OS工具箱,利用传统的ADB命令+Windows CMD 命令行原理。...可以做到给手表安装第三方平台APP,以及修改分辨率和修改DPI可以根据自己的喜好来给手表DIY。是搞机搞表一族的必备法宝。

    Identify-crx插件

    - 两个平台的SDK,允许第三方移动应用程序的开发人员在其任务下自定义接口和功能。 - 以及非常简单的添加和管理新客户。识别是您使用的最方便,快速安全的第二个因素!建议使用移动应用程序使用 - 对于ios:...

    最新鸽哒IM即时通讯软件系统源码 独立部署!加密通道 带安卓、苹果、PC端(全开源).zip

    3.网络上大部分聊天类APP是调用第三方平台插件, 没有独立数据库及后台,数据量大需要收费,且安全性得不到保障! 即时通讯,纯原生开发,各种功能应有尽有 支持加好友、消息私聊、消息群聊、朋友圈、红包、语音...

    鸽哒IM即时通讯软件系统源码 独立部署!加密通道 带安卓、苹果、PC端(全开源).zip

    3.网络上大部分聊天类APP是调用第三方平台插件, 没有独立数据库及后台,数据量大需要收费,且安全性得不到保障! 即时通讯,纯原生开发,各种功能应有尽有 支持加好友、消息私聊、消息群聊、朋友圈、红包、语音...

    强大的 FTP 服务器软件 Wing FTP Server Corporate 6.4.0.rar

    事件触发时, 可执行Lua脚本, 发送电子邮件 或 执行第三方的应用程序. 负载均衡 & 高可用 可以使用Wing Gateway对WingFTP进行集群, 以满足高可用 (或者负载均衡) 的需求. Weblink & Upload link 方便地创建和分享...

    java开源包101

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目源代码

    Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...

    java开源包1

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包11

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包2

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包3

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包6

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包5

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包10

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

Global site tag (gtag.js) - Google Analytics