一种跨系统传输目标对象的方法及设备转让专利

申请号 : CN202110871045.6

文献号 : CN115700453A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王晓东闫靖波王海山

申请人 : 华为技术有限公司

摘要 :

本申请实施例提供一种跨系统传输目标对象的方法及设备,涉及电子技术领域,能够在第一操作系统上运行了第二操作系统的应用程序的情况下,基于用户简单操作实现跨系统传输目标对象,该操作更符合用户基于第一操作系统的使用习惯,用户使用体验较好。该方案包括:电子设备显示第一界面,第一界面包括第一应用程序的窗口和第二应用程序的窗口,第一应用程序的窗口中包括目标对象,第二应用程序的窗口中不包括目标对象;第一应用程序或第二应用程序中的至少一个为第二操作系统的应用程序;电子设备响应于目标对象从第一应用程序的窗口拖拽至第二应用程序的窗口后释放拖拽的拖拽事件,将目标对象传输至第二应用程序。本申请实施例用于传输目标对象。

权利要求 :

1.一种目标对象的传输方法,应用于电子设备,所述电子设备运行有第一操作系统,所述第一操作系统上运行有所述第一操作系统的应用程序,且所述第一操作系统上基于模拟器运行有第二操作系统的应用程序,其特征在于,所述方法包括:所述电子设备显示第一界面,所述第一界面包括第一应用程序的窗口和第二应用程序的窗口,所述第一应用程序的窗口中包括目标对象,所述第二应用程序的窗口中不包括所述目标对象;其中,所述第一应用程序或所述第二应用程序中的至少一个为所述第二操作系统的应用程序;

所述电子设备响应于所述目标对象从所述第一应用程序的窗口拖拽至所述第二应用程序的窗口后释放拖拽的拖拽事件,将所述目标对象传输至所述第二应用程序。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

所述电子设备响应于所述目标对象从所述第一应用程序的窗口拖拽至所述第二应用程序的窗口后释放拖拽的拖拽事件,显示第二界面,所述第二界面包括所述第一应用程序的窗口和所述第二应用程序的窗口,所述第二应用程序的窗口中包括所述目标对象。

3.根据权利要求1或2所述的方法,其特征在于,所述第一应用程序或所述第二应用程序中的一个为所述第二操作系统的应用程序,所述目标对象包括一个或多个文件,所述电子设备包括所述第一操作系统和所述第二操作系统的共享文件夹;所述电子设备将所述目标对象传输至所述第二应用程序,包括:所述电子设备基于所述共享文件夹,将所述目标对象传输至所述第二应用程序。

4.根据权利要求3所述的方法,其特征在于,所述第一应用程序为所述第一操作系统的应用程序,所述第二应用程序为所述第二操作系统的应用程序;所述第一操作系统为所述模拟器的主机端Host,所述第二操作系统为所述模拟器的客户端Guest;所述电子设备基于所述共享文件夹,将所述目标对象传输至所述第二应用程序,包括:所述主机端Host将所述目标对象拷贝至所述共享文件夹;

所述客户端Guest从所述共享文件夹获取所述目标对象;

所述客户端Guest根据所述目标对象构建所述第二操作系统侧的拖拽事件,以将所述目标对象传输至所述第二应用程序。

5.根据权利要求4所述的方法,其特征在于,在所述主机端Host将所述目标对象拷贝至所述共享文件夹之前,所述方法还包括:所述主机端Host基于管道通信通知所述客户端Guest发生拖拽事件;

所述主机端Host在拖拽释放后,基于管道通信将拖拽释放位置坐标和拽释放窗口对应的所述第二操作系统侧窗口标识和传输类型通知给所述客户端Guest;所述传输类型用于表示所述目标对象在所述第一操作系统的应用程序与所述第二操作系统的应用程序之间传输;

若所述客户端Guest根据所述拖拽释放位置坐标和所述拽释放窗口对应的所述第二操作系统侧窗口标识确定所述释放位置允许拖拽,则基于所述传输类型通过管道通信通知所述主机端Host传输所述目标对象;

所述主机端Host将所述目标对象拷贝至所述共享文件夹,包括:

所述主机端Host将所述目标对象拷贝至所述共享文件夹,并基于管道通信将拷贝完成消息通知给所述客户端Guest;

所述客户端Guest从所述共享文件夹获取所述目标对象,包括:

所述客户端Guest接收到拷贝完成消息后,从所述共享文件夹获取所述目标对象。

6.根据权利要求5所述的方法,其特征在于,所述主机端Host将所述目标对象拷贝至所述共享文件夹,并基于管道通信将拷贝完成消息通知给所述客户端Guest,包括:所述主机端Host每将所述目标对象中的单个文件拷贝至所述共享文件夹后,基于管道通信将拷贝完成消息通知给所述客户端Guest;

所述客户端Guest从所述共享文件夹获取所述目标对象,包括:

所述客户端Guest每接收到一次拷贝完成消息后,从所述共享文件夹获取所述目标对象的一个文件;

所述客户端Guest根据所述目标对象构建所述第二操作系统侧的拖拽事件,以将所述目标对象传输至所述第二应用程序,包括:所述客户端Guest根据所述目标对象中的单个文件分别构建所述第二操作系统侧的拖拽事件,以将所述目标对象中的每个文件分别传输至所述第二应用程序。

7.根据权利要求5或6所述的方法,其特征在于,所述拷贝完成消息包括拷贝完成的文件的文件名;或者,所述拷贝完成消息包括拷贝完成的文件的文件名信息和时间戳。

8.根据权利要求4‑7任一项所述的方法,其特征在于,所述方法还包括:

当所述拖拽位置进入第三应用程序的窗口后,所述第三应用程序为所述第二操作系统的应用程序,且所述第三应用程序与所述第二应用程序相同或不同,所述电子设备根据所述第三应用程序是否允许拖入所述目标对象,显示允许拖拽标识或禁止拖拽标识。

9.根据权利要求3所述的方法,其特征在于,所述第一应用程序为所述第二操作系统的应用程序,所述第二应用程序为所述第一操作系统的应用程序;所述第一操作系统为所述模拟器的主机端Host,所述第二操作系统为所述模拟器的客户端Guest;所述电子设备基于所述共享文件夹,将所述目标对象传输至所述第二应用程序,包括:所述主机端Host构建所述第一操作系统侧的拖拽事件;

所述客户端Guest将所述目标对象拷贝至所述共享文件夹;

所述主机端Host取消所述第一操作系统侧的拖拽事件,将所述目标对象从所述共享文件夹,剪切至所述第二应用程序。

10.根据权利要求9所述的方法,其特征在于,若所述第二应用程序为所述第一操作系统的资源管理器,则所述客户端Guest将所述目标对象拷贝至所述共享文件夹,包括:所述客户端Guest以单个文件为粒度,将所述目标对象中的每个文件分别拷贝至所述共享文件夹;

所述主机端Host从所述共享文件夹将所述目标对象,剪切至所述第二应用程序,包括:所述主机端Host分别将所述目标对象中的每个文件从所述共享文件夹,剪切至所述第二应用程序。

11.根据权利要求3所述的方法,其特征在于,所述第一应用程序为所述第二操作系统的应用程序,所述第二应用程序为所述第一操作系统的应用程序;所述第一操作系统为所述模拟器的主机端Host,所述第二操作系统为所述模拟器的客户端Guest;所述电子设备基于所述共享文件夹,将所述目标对象传输至所述第二应用程序,包括:所述主机端Host构建所述第一操作系统侧的拖拽事件;

所述客户端Guest将所述目标对象拷贝至所述共享文件夹;

所述主机端Host从所述共享文件夹获取所述目标对象;

所述主机端Host基于所述第一操作系统侧的拖拽事件,将所述目标对象传输至所述第二应用程序,并结束所述第一操作系统侧的拖拽事件。

12.根据权利要求9‑11任一项所述的方法,其特征在于,在所述客户端Guest将所述目标对象拷贝至所述共享文件夹之前,所述方法还包括:所述客户端Guest基于管道通信通知所述主机端Host发生拖拽事件;

在拖拽释放后,若拖拽释放窗口为所述第一操作系统应用程序的窗口,则所述主机端Host基于管道通信将传输类型通知给所述客户端Guest;所述传输类型用于表示所述目标对象在所述第一操作系统的应用程序与所述第二操作系统的应用程序之间传输;

所述客户端Guest接收到所述传输类型后,基于管道通信通知所述主机端Guest传输所述目标对象;

在所述客户端Guest将所述目标对象拷贝至所述共享文件夹之后,所述方法还包括:所述客户端Guest将拷贝完成消息通知给所述主机端Host。

13.根据权利要求12所述的方法,其特征在于,所述拷贝完成消息包括拷贝完成的文件的文件名;或者,所述拷贝完成消息包括拷贝完成的文件的文件名信息和时间戳。

14.根据权利要求12或13所述的方法,其特征在于,在所述客户端Guest基于管道通信通知所述主机端Host发生拖拽事件之后,所述方法还包括:所述客户端Guest基于管道通信将所述目标对象的文件名信息和拖拽图标通知给所述主机端Host;

所述主机端Host根据所述文件名信息构建所述第一操作系统侧的拖拽事件,并设置拖拽图标。

15.根据权利要求1或2所述的方法,其特征在于,所述第一应用程序和所述第二应用程序为所述第二操作系统的应用程序,所述目标对象包括一个或多个文件;所述电子设备将所述目标对象传输至所述第二应用程序,包括:所述电子设备基于管道通信,将所述目标对象传输至所述第二应用程序。

16.根据权利要求15所述的方法,其特征在于,所述电子设备基于管道通信,将所述目标对象传输至所述第二应用程序,包括:所述客户端Guest基于管道通信通知所述主机端Host发生拖拽事件;

所述主机端Host构建所述第一操作系统侧的拖拽事件;

在拖拽释放后,若所述主机端Host根据释放位置坐标确定拖拽释放窗口为所述第二操作系统其他应用程序的窗口,则基于管道通信将拖拽源窗口对应的所述第二操作系统侧窗口标识、拖拽释放位置、拽释放窗口对应的所述第二操作系统侧窗口标识和传输类型通知给所述客户端Guest;所述传输类型用于表示所述目标对象在所述第二操作系统的不同应用程序之间传输;

若所述客户端Guest根据所述拖拽释放位置和所述拽释放窗口对应的所述第二操作系统侧窗口标识确定所述释放位置允许拖拽,则基于管道通信通知所述主机端Host传输所述目标对象;

所述客户端Guest获取所述目标对象,并根据所述目标对象构建所述第二操作系统侧拖拽事件,以将所述目标对象传输至所述第二应用程序。

17.根据权利要求16所述的方法,其特征在于,所述Guest侧存储有所述目标对象的文件名信息;

或者,所述客户端Guest基于管道通信通知所述主机端Host发生拖拽事件后,将所述目标对象的文件名信息通知给所述主机端Host;在拖拽释放后,所述主机端Host将所述文件名信息通知给所述客户端Guest;

所述客户端Guest获取所述目标对象,包括:所述客户端Guest根据所述文件名信息,获取所述目标对象。

18.根据权利要求15‑17任一项所述的方法,其特征在于,所述方法还包括:当所述拖拽位置进入第三应用程序的窗口后,所述第三应用程序为所述第二操作系统的应用程序,且所述第三应用程序与所述第二应用程序相同或不同,所述电子设备根据所述第三应用程序是否允许拖入所述目标对象,显示允许拖拽标识或禁止拖拽标识。

19.根据权利要求1‑18任一项所述的方法,其特征在于,在所述电子设备将将所述目标对象传输至所述第二应用程序之后,所述方法还包括:所述电子设备将所述目标对象保存到所述第二应用程序的窗口内拖拽释放位置对应的目录下;

或者,所述电子设备将所述目标对象通过所述第二应用程序发送给联系对象。

20.根据权利要求1‑19任一项所述的方法,其特征在于,所述拖拽事件为用户使用鼠标进行的拖拽操作触发的事件,或者用户基于触摸屏的拖拽操作触发的事件。

21.根据权利要求1或2所述的方法,其特征在于,所述目标对象为目标文本,所述电子设备将所述目标对象传输至所述第二应用程序,包括:所述电子设备基于管道通信,将所述目标对象传输至所述第二应用程序。

22.根据权利要求21所述的方法,其特征在于,所述第一应用程序为所述第一操作系统的应用程序,所述第二应用程序为所述第二操作系统的应用程序,所述电子设备基于管道通信,将所述目标对象传输至所述第二应用程序,包括:所述主机端Host基于管道通信通知所述客户端Guest发生拖拽事件;

所述主机端Host在拖拽释放后,基于管道通信将拖拽释放位置坐标和拽释放窗口对应的所述第二操作系统侧窗口标识、传输类型和所述目标对象的文本内容通知给所述客户端Guest;所述传输类型用于表示所述目标对象在所述第一操作系统的应用程序与所述第二操作系统的应用程序之间传输;

若所述客户端Guest根据所述拖拽释放位置坐标和所述拽释放窗口对应的所述第二操作系统侧窗口标识确定所述释放位置允许拖拽,则基于所述传输类型,根据所述文本内容构建所述第二操作系统侧拖拽事件,以将所述目标对象传输至所述第二应用程序。

23.根据权利要求21所述的方法,其特征在于,所述第一应用程序为所述第二操作系统的应用程序,所述第二应用程序为所述第一操作系统的应用程序,所述电子设备基于管道通信,将所述目标对象传输至所述第二应用程序,包括:所述客户端Guest基于管道通信通知所述主机端Host发生拖拽事件,并将所述目标对象的文本内容通知给所述主机端Host;

所述主机端Host构建所述第一操作系统侧拖拽事件;

在拖拽释放后,若所述主机端Host根据释放位置坐标确定拖拽释放窗口为所述第一操作系统应用程序的窗口,则基于管道通信将传输类型通知给所述客户端Guest;所述传输类型用于表示所述目标对象在所述第一操作系统的应用程序与所述第二操作系统的应用程序之间传输;

若拖拽释放窗口为所述第一操作系统的资源管理器窗口,则所述主机端Host基于所述传输类型,取消所述第一操作系统侧拖拽事件,将所述目标对象剪切至所述第二应用程序;

若拖拽释放窗口不是所述第一操作系统的资源管理器窗口,则所述主机端Host基于所述传输类型,通过所述第一操作系统侧拖拽事件将所述目标对象传输至所述第二应用程序,并结束所述第一操作系统侧拖拽事件。

24.根据权利要求21所述的方法,其特征在于,所述第一应用程序和所述第二应用程序为所述第二操作系统的不同应用程序,所述电子设备基于管道通信,将所述目标对象传输至所述第二应用程序,包括:所述客户端Guest基于管道通信通知所述主机端Host发生拖拽事件,并将所述目标对象的文本内容通知给所述主机端Host;

所述主机端Host构建所述第一操作系统侧的拖拽事件;

在拖拽释放后,若所述主机端Host根据释放位置坐标确定拖拽释放窗口为所述第二操作系统其他应用程序的窗口,则基于管道通信将拖拽源窗口对应的所述第二操作系统侧窗口标识、拖拽释放位置、拽释放窗口对应的所述第二操作系统侧窗口标识、传输类型和所述文本内容通知给所述客户端Guest;所述传输类型用于表示所述目标对象在所述第二操作系统的不同应用程序之间传输;

若所述客户端Guest根据所述拖拽释放位置和所述拽释放窗口对应的所述第二操作系统侧窗口标识确定所述释放位置允许拖拽,则基于所述传输类型获取所述目标对象,根据所述目标对象构建所述第二操作系统侧拖拽事件,以将所述目标对象传输至所述第二应用程序。

25.根据权利要求21‑24任一项所述的方法,其特征在于,所述Guest侧存储有所述目标对象的文本内容;

或者,所述客户端Guest基于管道通信通知所述主机端Host发生拖拽事件后,将所述目标对象的文本内容通知给所述主机端Host;在拖拽释放后,所述主机端Host将所述文本内容通知给所述客户端Guest;

所述客户端Guest获取所述目标对象,包括:所述客户端Guest获取所述文本内容。

26.一种目标对象的传输方法,应用于电子设备,所述电子设备运行有第一操作系统,所述第一操作系统上运行有所述第一操作系统的应用程序,且所述第一操作系统上基于模拟器运行有第二操作系统的应用程序,其特征在于,所述方法包括:所述电子设备显示第一界面,所述第一界面包括第一应用程序的窗口和第二应用程序的窗口,所述第一应用程序的窗口中包括目标对象,所述第二应用程序的窗口中不包括所述目标对象;其中,所述第一应用程序和所述第二应用程序为不同操作系统中的应用程序,所述目标对象包括一个或多个文件;

所述电子设备响应于针对所述第一应用程序的窗口中所述目标对象的目标事件,所述目标事件包括复制事件或剪切事件,以及所述第二应用程序的窗口中的粘贴事件,将所述目标对象传输至所述第二应用程序。

27.根据权利要求26所述的方法,其特征在于,所述电子设备包括所述第一操作系统和所述第二操作系统的共享剪贴板和共享文件夹;所述电子设备响应于针对所述第一应用程序的窗口中所述目标对象的目标事件,以及所述第二应用程序的窗口中的粘贴事件,将所述目标对象传输至所述第二应用程序,包括:所述电子设备所述电子设备响应于针对所述第一应用程序的窗口中所述目标对象的目标事件,以及所述第二应用程序的窗口中的粘贴事件,基于所述共享剪贴板将所述目标对象传输至所述第二应用程序。

28.根据权利要求27所述的方法,其特征在于,所述第一应用程序为所述第一操作系统的应用程序,所述第二应用程序为所述第二操作系统的程序,所述第一操作系统为所述模拟器的主机端Host,所述第二操作系统为所述模拟器的客户端Guest;所述电子设备响应于针对所述第一应用程序的窗口中所述目标对象的目标事件,以及所述第二应用程序的窗口中的粘贴事件,将所述目标对象传输至所述第二应用程序,包括:所述主机端Host响应于针对所述第一应用程序的窗口中所述目标对象的目标事件,将所述目标对象的路径信息存放到所述第一操作系统的剪贴板;

所述主机端Host将所述第一操作系统的剪贴板中的所述路径信息同步到所述共享剪贴板;

所述客户端Guest响应于所述第二应用程序的窗口中的粘贴事件,基于管道通信通知所述主机端Host传输所述目标对象;

所述主机端Host将所述共享剪贴板中的所述路径信息对应的所述目标对象拷贝到共享文件夹,并将拷贝完成消息通知给所述客户端Guest;

所述客户端Guest接收到所述拷贝完成消息后,将所述目标对象从所述共享文件夹复制到所述第二应用程序。

29.根据权利要求28所述的方法,其特征在于,所述客户端Guest基于管道通信通知所述主机端Host传输所述目标对象,包括:所述客户端Guest对所述第二应用程序对应的待粘贴目的路径,以及所述共享剪贴板中的所述路径信息对应的所述目标对象进行预检查,在预检查通过后基于管道通信通知所述主机端Host传输所述目标对象;

所述主机端Host将所述共享剪贴板中的所述路径信息对应的所述目标对象拷贝到共享文件夹,包括:所述主机端Host确定源目标对象是否存在,若存在则将所述共享剪贴板中的所述路径信息对应的所述目标对象拷贝到共享文件夹。

30.根据权利要求27所述的方法,其特征在于,所述第一应用程序为所述第二操作系统的应用程序,所述第二应用程序为所述第一操作系统的程序,所述第一操作系统为所述模拟器的主机端Host,所述第二操作系统为所述模拟器的客户端Guest;所述电子设备响应于针对所述第一应用程序的窗口中所述目标对象的目标事件,以及所述第二应用程序的窗口中的粘贴事件,将所述目标对象传输至所述第二应用程序,包括:所述客户端Guest响应于针对所述第一应用程序的窗口中所述目标对象的目标事件,将所述目标对象的路径信息存放到所述第二操作系统的剪贴板;

所述客户端Guest将所述第二操作系统的剪贴板中的所述路径信息同步到所述共享剪贴板;

所述主机端Host响应于所述第二应用程序的窗口中的粘贴操作,基于管道通信通知所述客户端Guest传输所述目标对象;

所述客户端Guest将所述共享剪贴板中的所述路径信息对应的所述目标对象拷贝到共享文件夹,并将拷贝完成消息通知给所述主机端Host;

所述主机端Host接收到所述拷贝完成消息后,将所述目标对象从所述共享文件夹复制到所述第二应用程序。

31.根据权利要求30所述的方法,其特征在于,所述主机端Host基于管道通信通知所述所述客户端Guest传输所述目标对象,包括:所述主机端Host对所述第二应用程序对应的待粘贴目的路径,以及所述共享剪贴板中的所述路径信息对应的所述目标对象进行预检查,在预检查通过后基于管道通信通知所述客户端Guest传输所述目标对象;

所述客户端Guest将所述共享剪贴板中的所述路径信息对应的所述目标对象拷贝到共享文件夹,包括:所述客户端Guest确定源目标对象是否存在,若存在则将所述共享剪贴板中的所述路径信息对应的所述目标对象拷贝到共享文件夹。

32.根据权利要求26‑31任一项所述的方法,其特征在于,在所述电子设备将将所述目标对象传输至所述第二应用程序之后,所述方法还包括:所述电子设备将所述目标对象保存到所述第二应用程序的窗口内拖拽释放位置对应的目录下;

或者,所述电子设备将所述目标对象通过所述第二应用程序发送给联系对象。

33.根据权利要求26‑32任一项所述的方法,其特征在于,所述目标事件为复制事件,所述复制事件由以下任意操作触发:用户针对所述目标对象使用键盘快捷键的复制操作,用户针对所述目标对象使用鼠标右键选择复制的操作,用户针对所述目标对象长按鼠标左键后选择复制的操作,或用户基于触摸屏长按所述目标对象后选择复制的操作;

所述粘贴事件由以下任意操作触发:用户针对所述目标对象使用键盘快捷键的粘贴操作,用户针对所述目标对象使用鼠标右键选择粘贴的操作,用户针对所述目标对象长按鼠标左键后选择粘贴的操作,或用户基于触摸屏长按所述目标对象后选择粘贴的操作。

34.根据权利要求26‑32任一项所述的方法,其特征在于,所述目标事件为剪切事件,在所述电子设备将所述目标对象传输至所述第二应用程序之后,所述方法还包括:所述电子设备删除所述第一应用程序中的所述目标对象。

35.根据权利要求1‑34任一项所述的方法,其特征在于,所述共享文件夹为Virtio‑9p共享文件夹,所述管道通信为Qemu Pipe。

36.根据权利要求1‑35任一项所述的方法,其特征在于,所述第一操作系统为Windows操作系统,所述第二操作系统为安卓Android操作系统。

37.一种电子设备,其特征在于,包括:

屏幕,用于显示界面;

一个或多个处理器;

存储器;

以及一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中,所述一个或多个计算机程序包括指令,当所述指令被所述电子设备执行时,使得所述电子设备执行如权利要求1‑36中任一项所述的目标对象的传输方法。

38.一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在计算机上运行时,使得所述计算机执行如权利要求1‑36中任一项所述的目标对象的传输方法。

说明书 :

一种跨系统传输目标对象的方法及设备

技术领域

[0001] 本申请实施例涉及电子技术领域,尤其涉及一种跨系统传输目标对象的方法及设备。

背景技术

[0002] 随着电脑与手机的进一步生态融合,手机上的安卓(Android)应用程序可以通过虚拟化技术运行在Windows操作系统上,使得用户可以便捷地在Windows操作系统上使用Android应用程序。
[0003] 在Windows操作系统运行了Android应用程序的情况下,Windows应用程序与Android应用程序之间可能需要频繁地交互文件。其中,由于Windows操作系统与Android操作系统属于完全不同的两种系统,实现逻辑和包括的组件等也都不同,因而两者之间的文件交互过程也比较复杂。
[0004] 在Windows应用程序与Android应用程序之间进行文件交互时,用户需要进行多步、复杂的操作,用户使用体验较差。例如,用户想要将Windows资源管理器中的目标文件传输至Android应用程序时,需要先将Windows资源管理器中的目标文件放置在共享文件夹中,然后再通过在Android应用程序中寻找并选择目标文件,或者通过从Android文件管理中点击分享控件并选择目的Android应用程序,从而实现该目标文件的传输。示例性的,关于文档1的文件传输过程可以参见图1A中的(a)‑(f),首先用户将Windows应用程序的窗口01中的文档1拖拽至共享文件夹,然后用户打开Android应用程序的窗口02,而后用户点击添加控件03后,选择共享文件夹,选择共享文件夹中的文档1,从而将文档1添加到Android应用程序的窗口中,用户需要进行一系列的复杂操作。

发明内容

[0005] 本申请实施例提供一种跨系统传输目标对象的方法及设备,能够在第一操作系统上运行了第二操作系统的应用程序的情况下,基于用户的简单操作,实现第一操作系统的应用程序与第二操作系统的应用程序之间的文件或文本交互,以及第二操作系统的不同应用程序之间的文件或文本交互,且该操作更符合用户基于第一操作系统的使用习惯,用户使用体验较好。
[0006] 为达到上述目的,本申请实施例采用如下技术方案:
[0007] 一方面,本申请实施例提供了一种目标对象的传输方法,应用于电子设备,该电子设备运行有第一操作系统,第一操作系统上运行有第一操作系统的应用程序,且第一操作系统上基于模拟器运行有第二操作系统的应用程序。该方法包括:电子设备显示第一界面,第一界面包括第一应用程序的窗口和第二应用程序的窗口,第一应用程序的窗口中包括目标对象,第二应用程序的窗口中不包括目标对象。其中,第一应用程序或第二应用程序中的至少一个为第二操作系统的应用程序。电子设备响应于目标对象从第一应用程序的窗口拖拽至第二应用程序的窗口后释放拖拽的拖拽事件,将目标对象传输至第二应用程序。
[0008] 例如,该拖拽事件可由用户的拖拽操作触发。这样,电子设备能够基于用户简单的拖拽操作,实现第一操作系统的应用程序与第二操作系统的应用程序之间的目标对象的交互,以及第一操作系统上第二操作系统的不同应用程序之间的目标对象的交互。并且,用户的该简单操作更符合用户基于第一操作系统的使用习惯,用户使用体验较好。例如,该目标对象可以包括文件、文本或其他可传输对象。
[0009] 在一种可能的设计中,该方法还包括:电子设备响应于目标对象从第一应用程序的窗口拖拽至第二应用程序的窗口后释放拖拽的拖拽事件,显示第二界面,第二界面包括第一应用程序的窗口和第二应用程序的窗口,第二应用程序的窗口中包括目标对象。
[0010] 也就是说,电子设备将目标对象将第一应用程序传输至第二应用程序的后,可以在第二应用程序的窗口中显示该目标对象。
[0011] 在另一种可能的设计中,第一应用程序或第二应用程序中的一个为第二操作系统的应用程序,目标对象包括一个或多个文件,电子设备包括第一操作系统和第二操作系统的共享文件夹。电子设备将目标对象传输至第二应用程序,包括:电子设备基于共享文件夹,将目标对象传输至第二应用程序。
[0012] 在该方案中,目标对象为目标文件,第一应用程序中的目标对象可以通过共享文件夹,传输至第二应用程序。
[0013] 在另一种可能的设计中,第一应用程序为第一操作系统的应用程序,第二应用程序为第二操作系统的应用程序;第一操作系统为模拟器的主机端Host,第二操作系统为模拟器的客户端Guest。电子设备基于共享文件夹,将目标对象传输至第二应用程序,包括:主机端Host将目标对象拷贝至共享文件夹;客户端Guest从共享文件夹获取目标对象;客户端Guest根据目标对象构建第二操作系统侧的拖拽事件,以将目标对象传输至第二应用程序。
[0014] 在该方案中,基于共享文件夹,第一操作系统应用程序中的目标对象,可以被传输至第二操作系统的应用程序中。
[0015] 在另一种可能的设计中,在主机端Host将目标对象拷贝至共享文件夹之前,该方法还包括:主机端Host基于管道通信通知客户端Guest发生拖拽事件;主机端Host在拖拽释放后,基于管道通信将拖拽释放位置坐标和拽释放窗口对应的第二操作系统侧窗口标识和传输类型通知给客户端Guest;传输类型用于表示目标对象在第一操作系统的应用程序与第二操作系统的应用程序之间传输。若客户端Guest根据拖拽释放位置坐标和拽释放窗口对应的第二操作系统侧窗口标识确定释放位置允许拖拽,则基于传输类型通过管道通信通知主机端Host传输目标对象。主机端Host将目标对象拷贝至共享文件夹,包括:主机端Host将目标对象拷贝至共享文件夹,并基于管道通信将拷贝完成消息通知给客户端Guest。客户端Guest从共享文件夹获取目标对象,包括:客户端Guest接收到拷贝完成消息后,从共享文件夹获取目标对象。
[0016] 也就是说,第一操作系统和第二操作系统之间可以基于管道通信进行通信交互,从而将第一操作系统应用程序中的目标对象传输至第二操作系统的应用程序中。
[0017] 在另一种可能的设计中,主机端Host将目标对象拷贝至共享文件夹,并基于管道通信将拷贝完成消息通知给客户端Guest,包括:主机端Host每将目标对象中的单个文件拷贝至共享文件夹后,基于管道通信将拷贝完成消息通知给客户端Guest。客户端Guest从共享文件夹获取目标对象,包括:客户端Guest每接收到一次拷贝完成消息后,从共享文件夹获取目标对象的一个文件。客户端Guest根据目标对象构建第二操作系统侧的拖拽事件,以将目标对象传输至第二应用程序,包括:客户端Guest根据目标对象中的单个文件分别构建第二操作系统侧的拖拽事件,以将目标对象中的每个文件分别传输至第二应用程序。
[0018] 在该方案中,当目标对象包括多个文件时,电子设备可以将目标文件中的单个文件分别传输至第二应用程序。
[0019] 在另一种可能的设计中,拷贝完成消息包括拷贝完成的文件的文件名;或者,拷贝完成消息包括拷贝完成的文件的文件名信息和时间戳。
[0020] 这样,客户端Guest可以基于文件的文件名,以及时间戳,获取目标对象。
[0021] 在另一种可能的设计中,该方法还包括:当拖拽位置进入第三应用程序的窗口后,第三应用程序为第二操作系统的应用程序,且第三应用程序与第二应用程序相同或不同,电子设备根据第三应用程序是否允许拖入目标对象,显示允许拖拽标识或禁止拖拽标识。
[0022] 这样,电子设备可以通过显示允许拖拽标识或禁止拖拽标识,来实时提示用户当前位置是否允许拖入目标对象。
[0023] 在另一种可能的设计中,第一应用程序为第二操作系统的应用程序,第二应用程序为第一操作系统的应用程序;第一操作系统为模拟器的主机端Host,第二操作系统为模拟器的客户端Guest。电子设备基于共享文件夹,将目标对象传输至第二应用程序,包括:主机端Host构建第一操作系统侧的拖拽事件;客户端Guest将目标对象拷贝至共享文件夹;主机端Host取消第一操作系统侧的拖拽事件,将目标对象从共享文件夹,剪切至第二应用程序。
[0024] 在该方案中,电子设备可以响应于用户的拖拽,并基于共享文件夹,将第二操作系统的应用程序中的目标对象剪切至第二应用程序。
[0025] 在另一种可能的设计中,若第二应用程序为第一操作系统的资源管理器,则客户端Guest将目标对象拷贝至共享文件夹,包括:客户端Guest以单个文件为粒度,将目标对象中的每个文件分别拷贝至共享文件夹。主机端Host从共享文件夹将目标对象,剪切至第二应用程序,包括:主机端Host分别将目标对象中的每个文件从共享文件夹,剪切至第二应用程序。
[0026] 在该方案中,当目标对象包括多个文件时,电子设备可以响应于用户的拖拽,并基于共享文件夹,将第二操作系统的应用程序中目标对象包括的单个文件分别剪切至第二应用程序。
[0027] 在另一种可能的设计中,第一应用程序为第二操作系统的应用程序,第二应用程序为第一操作系统的应用程序;第一操作系统为模拟器的主机端Host,第二操作系统为模拟器的客户端Guest。电子设备基于共享文件夹,将目标对象传输至第二应用程序,包括:主机端Host构建第一操作系统侧的拖拽事件;客户端Guest将目标对象拷贝至共享文件夹;主机端Host从共享文件夹获取目标对象;主机端Host基于第一操作系统侧的拖拽事件,将目标对象传输至第二应用程序,并结束第一操作系统侧的拖拽事件。
[0028] 在该方案中,电子设备基于共享文件夹和构建的拖拽事件,将第二操作系统的应用程序中的目标对象传输至第二应用程序。
[0029] 在另一种可能的设计中,在客户端Guest将目标对象拷贝至共享文件夹之前,该方法还包括:客户端Guest基于管道通信通知主机端Host发生拖拽事件;在拖拽释放后,若拖拽释放窗口为第一操作系统应用程序的窗口,则主机端Host基于管道通信将传输类型通知给客户端Guest;传输类型用于表示目标对象在第一操作系统的应用程序与第二操作系统的应用程序之间传输;客户端Guest接收到传输类型后,基于管道通信通知主机端Guest传输目标对象。在客户端Guest将目标对象拷贝至共享文件夹之后,该方法还包括:客户端Guest将拷贝完成消息通知给主机端Host。
[0030] 在该方案中,第一操作系统和第二操作系统之间基于管道通信进行通信交互,从而将第二操作系统应用程序中的目标对象传输至第一操作系统的应用程序中。
[0031] 在另一种可能的设计中,拷贝完成消息包括拷贝完成的文件的文件名;或者,拷贝完成消息包括拷贝完成的文件的文件名信息和时间戳。
[0032] 这样,主机端可以基于文件的文件名,以及时间戳,获取目标对象。
[0033] 在另一种可能的设计中,在客户端Guest基于管道通信通知主机端Host发生拖拽事件之后,该方法还包括:客户端Guest基于管道通信将目标对象的文件名信息和拖拽图标通知给主机端Host;主机端Host根据文件名信息构建第一操作系统侧的拖拽事件,并设置拖拽图标。
[0034] 这样,在用户拖拽目标对象的过程中,电子设备可以在界面上实时显示拖拽图标。
[0035] 在另一种可能的设计中,第一应用程序和第二应用程序为第二操作系统的应用程序,目标对象包括一个或多个文件;电子设备将目标对象传输至第二应用程序,包括:电子设备基于管道通信,将目标对象传输至第二应用程序。
[0036] 在该方案中,电子设备可以基于管道通信,将第二操作系统中第一应用程序中的目标对象,传输至第二应用程序。
[0037] 在另一种可能的设计中,电子设备基于管道通信,将目标对象传输至第二应用程序,包括:客户端Guest基于管道通信通知主机端Host发生拖拽事件。主机端Host构建第一操作系统侧的拖拽事件。在拖拽释放后,若主机端Host根据释放位置坐标确定拖拽释放窗口为第二操作系统其他应用程序的窗口,则基于管道通信将拖拽源窗口对应的第二操作系统侧窗口标识、拖拽释放位置、拽释放窗口对应的第二操作系统侧窗口标识和传输类型通知给客户端Guest。传输类型用于表示目标对象在第二操作系统的不同应用程序之间传输。若客户端Guest根据拖拽释放位置和拽释放窗口对应的第二操作系统侧窗口标识确定释放位置允许拖拽,则基于管道通信通知主机端Host传输目标对象。客户端Guest获取目标对象,并根据目标对象构建第二操作系统侧拖拽事件,以将目标对象传输至第二应用程序。
[0038] 在该方案中,电子设备可以基于构建的拖拽事件,在第二操作系统的不同应用程序之间传输目标对象。
[0039] 在另一种可能的设计中,Guest侧存储有目标对象的文件名信息。或者,客户端Guest基于管道通信通知主机端Host发生拖拽事件后,将目标对象的文件名信息通知给主机端Host;在拖拽释放后,主机端Host将文件名信息通知给客户端Guest。客户端Guest获取目标对象,包括:客户端Guest根据文件名信息,获取目标对象。
[0040] 也就是说,目标对象的文件名信息可以在第二操作系统和第一操作系统之间进行传递,或者第二操作系统可以预先进行存储,以便在拖拽释放后根据该文件名信息获取目标对象,从而传输至第二应用程序。
[0041] 在另一种可能的设计中,该方法还包括:当拖拽位置进入第三应用程序的窗口后,第三应用程序为第二操作系统的应用程序,且第三应用程序与第二应用程序相同或不同,电子设备根据第三应用程序是否允许拖入目标对象,显示允许拖拽标识或禁止拖拽标识。
[0042] 这样,电子设备可以通过显示允许拖拽标识或禁止拖拽标识,来提示用户当前位置是否允许拖拽。
[0043] 在另一种可能的设计中,在电子设备将将目标对象传输至第二应用程序之后,该方法还包括:电子设备将目标对象保存到第二应用程序的窗口内拖拽释放位置对应的目录下;或者,电子设备将目标对象通过第二应用程序发送给联系对象。
[0044] 也就是说,第二应用程序可以保存传输获得的目标对象,或者将该目标对象发送给联系对象。
[0045] 在另一种可能的设计中,拖拽事件为用户使用鼠标进行的拖拽操作触发的事件,或者用户基于触摸屏的拖拽操作触发的事件。
[0046] 也就是说,用户可以通过鼠标,或者通过触摸屏的触摸操作,来拖拽传输目标对象。
[0047] 在另一种可能的设计中,目标对象为目标文本,电子设备将目标对象传输至第二应用程序,包括:电子设备基于管道通信,将目标对象传输至第二应用程序。
[0048] 在该方案中,响应于用户的拖拽操作,电子设备可以基于管道通信,将第一应用程序中的目标文件传输至第二应用程序。
[0049] 在另一种可能的设计中,第一应用程序为第一操作系统的应用程序,第二应用程序为第二操作系统的应用程序。电子设备基于管道通信,将目标对象传输至第二应用程序,包括:主机端Host基于管道通信通知客户端Guest发生拖拽事件。主机端Host在拖拽释放后,基于管道通信将拖拽释放位置坐标和拽释放窗口对应的第二操作系统侧窗口标识、传输类型和目标对象的文本内容通知给客户端Guest;传输类型用于表示目标对象在第一操作系统的应用程序与第二操作系统的应用程序之间传输。若客户端Guest根据拖拽释放位置坐标和拽释放窗口对应的第二操作系统侧窗口标识确定释放位置允许拖拽,则基于传输类型,根据文本内容构建第二操作系统侧拖拽事件,以将目标对象传输至第二应用程序。
[0050] 在该方案中,电子设备可以基于管道通信和构建的第二操作系统侧的拖拽事件,将目标对象传输至第二操作系统的第二应用程序。
[0051] 在另一种可能的设计中,第一应用程序为第二操作系统的应用程序,第二应用程序为第一操作系统的应用程序。电子设备基于管道通信,将目标对象传输至第二应用程序,包括:客户端Guest基于管道通信通知主机端Host发生拖拽事件,并将目标对象的文本内容通知给主机端Host;主机端Host构建第一操作系统侧拖拽事件。在拖拽释放后,若主机端Host根据释放位置坐标确定拖拽释放窗口为第一操作系统应用程序的窗口,则基于管道通信将传输类型通知给客户端Guest;传输类型用于表示目标对象在第一操作系统的应用程序与第二操作系统的应用程序之间传输。若拖拽释放窗口为第一操作系统的资源管理器窗口,则主机端Host基于传输类型,取消第一操作系统侧拖拽事件,将目标对象剪切至第二应用程序。若拖拽释放窗口不是第一操作系统的资源管理器窗口,则主机端Host基于传输类型,通过第二操作系统侧拖拽事件将目标对象传输至第二应用程序,并结束第一操作系统侧拖拽事件。
[0052] 在该方案中,电子设备可以基于管道通信和构建的拖拽事件,将第二操作系统应用程序中的目标对象,传输至第一操作系统的应用程序。
[0053] 在另一种可能的设计中,第一应用程序和第二应用程序为第二操作系统的不同应用程序,电子设备基于管道通信,将目标对象传输至第二应用程序,包括:客户端Guest基于管道通信通知主机端Host发生拖拽事件,并将目标对象的文本内容通知给主机端Host。主机端Host构建第一操作系统侧的拖拽事件。在拖拽释放后,若主机端Host根据释放位置坐标确定拖拽释放窗口为第二操作系统其他应用程序的窗口,则基于管道通信将拖拽源窗口对应的第二操作系统侧窗口标识、拖拽释放位置、拽释放窗口对应的第二操作系统侧窗口标识、传输类型和文本内容通知给客户端Guest;传输类型用于表示目标对象在第二操作系统的不同应用程序之间传输。若客户端Guest根据拖拽释放位置和拽释放窗口对应的第二操作系统侧窗口标识确定释放位置允许拖拽,则基于传输类型获取目标对象,根据目标对象构建第二操作系统侧拖拽事件,以将目标对象传输至第二应用程序。
[0054] 在该方案中,电子设备可以基于管道通信和构建的拖拽事件,在第二操作系统的不同应用程序之间传输目标对象。
[0055] 在另一种可能的设计中,Guest侧存储有目标对象的文本内容;或者,客户端Guest基于管道通信通知主机端Host发生拖拽事件后,将目标对象的文本内容通知给主机端Host;在拖拽释放后,主机端Host将文本内容通知给客户端Guest;客户端Guest获取目标对象,包括:客户端Guest获取文本内容。
[0056] 也就是说,目标对象的文本内容可以在第二操作系统和第一操作系统之间进行传递,或者第二操作系统可以预先进行存储,以便在拖拽释放后将该文本内容传输至第二应用程序。
[0057] 另一方面,本申请实施例提供了一种目标对象的传输方法,应用于电子设备,该电子设备运行有第一操作系统,第一操作系统上运行有第一操作系统的应用程序,且第一操作系统上基于模拟器运行有第二操作系统的应用程序。该方法包括:电子设备显示第一界面,第一界面包括第一应用程序的窗口和第二应用程序的窗口,第一应用程序的窗口中包括目标对象,第二应用程序的窗口中不包括目标对象;其中,第一应用程序和第二应用程序为不同操作系统中的应用程序,目标对象包括一个或多个文件。电子设备响应于针对第一应用程序的窗口中目标对象的目标事件,目标事件包括复制事件或剪切事件,以及第二应用程序的窗口中的粘贴事件,将目标对象传输至第二应用程序。
[0058] 例如,该复制事件或剪切事件可由用户简单的目标操作而触发,例如该目标操作可以是复制操作或剪切操作等。这样,电子设备能够基于用户简单的目标操作,实现第一操作系统的应用程序与第二操作系统的应用程序之间的目标对象的交互,以及第一操作系统上第二操作系统的不同应用程序之间的目标对象的交互。并且,用户的该简单操作更符合用户基于第一操作系统的使用习惯,用户使用体验较好。例如,该目标对象可以包括文件、文本或其他可传输对象。
[0059] 在一种可能的设计中,电子设备包括第一操作系统和第二操作系统的共享剪贴板和共享文件夹。电子设备响应于针对第一应用程序的窗口中目标对象的目标事件,以及第二应用程序的窗口中的粘贴事件,将目标对象传输至第二应用程序,包括:电子设备电子设备响应于针对第一应用程序的窗口中目标对象的目标事件,以及第二应用程序的窗口中的粘贴事件,基于共享剪贴板将目标对象传输至第二应用程序。
[0060] 在该方案中,电子设备可以基于共享剪贴板,跨系统传输目标对象。
[0061] 在另一种可能的设计中,第一应用程序为第一操作系统的应用程序,第二应用程序为第二操作系统的程序,第一操作系统为模拟器的主机端Host,第二操作系统为模拟器的客户端Guest;电子设备响应于针对第一应用程序的窗口中目标对象的目标事件,以及第二应用程序的窗口中的粘贴事件,将目标对象传输至第二应用程序,包括:主机端Host响应于针对第一应用程序的窗口中目标对象的目标事件,将目标对象的路径信息存放到第一操作系统的剪贴板。主机端Host将第一操作系统的剪贴板中的路径信息同步到共享剪贴板。客户端Guest响应于第二应用程序的窗口中的粘贴事件,基于管道通信通知主机端Host传输目标对象。主机端Host将共享剪贴板中的路径信息对应的目标对象拷贝到共享文件夹,并将拷贝完成消息通知给客户端Guest。客户端Guest接收到拷贝完成消息后,将目标对象从共享文件夹复制到第二应用程序。
[0062] 在该方案中,电子设备可以基于共享剪贴板,将目标对象从第一操作系统的应用程序传输至第二操作系统的应用程序。
[0063] 在另一种可能的设计中,客户端Guest基于管道通信通知主机端Host传输目标对象,包括:客户端Guest对第二应用程序对应的待粘贴目的路径,以及共享剪贴板中的路径信息对应的目标对象进行预检查,在预检查通过后基于管道通信通知主机端Host传输目标对象。主机端Host将共享剪贴板中的路径信息对应的目标对象拷贝到共享文件夹,包括:主机端Host确定源目标对象是否存在,若存在则将共享剪贴板中的路径信息对应的目标对象拷贝到共享文件夹。
[0064] 在该方案中,在目标对象的传输过程中,电子设备需要先进行相关的传输检查,在检查通过后,才能成功传输目标对象。
[0065] 在另一种可能的设计中,第一应用程序为第二操作系统的应用程序,第二应用程序为第一操作系统的程序,第一操作系统为模拟器的主机端Host,第二操作系统为模拟器的客户端Guest。电子设备响应于针对第一应用程序的窗口中目标对象的目标事件,以及第二应用程序的窗口中的粘贴事件,将目标对象传输至第二应用程序,包括:客户端Guest响应于针对第一应用程序的窗口中目标对象的目标事件,将目标对象的路径信息存放到第二操作系统的剪贴板。客户端Guest将第二操作系统的剪贴板中的路径信息同步到共享剪贴板。主机端Host响应于第二应用程序的窗口中的粘贴操作,基于管道通信通知客户端Guest传输目标对象。客户端Guest将共享剪贴板中的路径信息对应的目标对象拷贝到共享文件夹,并将拷贝完成消息通知给主机端Host。主机端Host接收到拷贝完成消息后,将目标对象从共享文件夹复制到第二应用程序。
[0066] 在该方案中,电子设备可以基于共享剪贴板,将第二操作系统应用程序中的目标对象,传输至第一操作系统的应用程序。
[0067] 在另一种可能的设计中,主机端Host基于管道通信通知客户端Guest传输目标对象,包括:主机端Host对第二应用程序对应的待粘贴目的路径,以及共享剪贴板中的路径信息对应的目标对象进行预检查,在预检查通过后基于管道通信通知客户端Guest传输目标对象。客户端Guest将共享剪贴板中的路径信息对应的目标对象拷贝到共享文件夹,包括:客户端Guest确定源目标对象是否存在,若存在则将共享剪贴板中的路径信息对应的目标对象拷贝到共享文件夹。
[0068] 在该方案中,在目标对象的传输过程中,电子设备需要先进行相关的传输检查,在检查通过后,才能成功传输目标对象。
[0069] 在另一种可能的设计中,在电子设备将将目标对象传输至第二应用程序之后,该方法还包括:电子设备将目标对象保存到第二应用程序的窗口内拖拽释放位置对应的目录下;或者,电子设备将目标对象通过第二应用程序发送给联系对象。
[0070] 也就是说,第二应用程序可以保存传输获得的目标对象,或者将该目标对象发送给联系对象。
[0071] 在另一种可能的设计中,目标事件为复制事件,复制事件由以下任意操作触发:用户针对目标对象使用键盘快捷键的复制操作,用户针对目标对象使用鼠标右键选择复制的操作,用户针对目标对象长按鼠标左键后选择复制的操作,或用户基于触摸屏长按目标对象后选择复制的操作。粘贴事件由以下任意操作触发:用户针对目标对象使用键盘快捷键的粘贴操作,用户针对目标对象使用鼠标右键选择粘贴的操作,用户针对目标对象长按鼠标左键后选择粘贴的操作,或用户基于触摸屏长按目标对象后选择粘贴的操作。
[0072] 也就是说,电子设备可以响应于用户的复制操作和粘贴操作,将第一应用程序中的目标对象传输至第二应用程序,并保留第一应用程序中的目标对象。
[0073] 在另一种可能的设计中,目标事件为剪切事件,在电子设备将目标对象传输至第二应用程序之后,该方法还包括:电子设备删除第一应用程序中的目标对象。
[0074] 也就是说,电子设备可以响应于用户的剪切操作和粘贴操作,将第一应用程序中的目标对象传输至第二应用程序,并删除第一应用程序中的目标对象。
[0075] 在另一种可能的设计中,共享文件夹为Virtio‑9p共享文件夹,管道通信为Qemu Pipe。
[0076] 这样,第一应用程序和第二应用程序之间可以基于Virtio‑9p共享文件夹和Qemu Pipe,来传输目标对象。
[0077] 在另一种可能的设计中,第一操作系统为Windows操作系统,第二操作系统为安卓Android操作系统。
[0078] 这样,Windows操作系统和Android操作系统的应用程序之间可以跨系统传输目标对象,或者Android操作系统的不同应用程序之间可以传输目标对象。
[0079] 又一方面,本申请实施例提供了一种目标对象传输装置,该装置包含在电子设备中,该装置具有实现上述方面及可能的设计中任一方法中电子设备行为的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括至少一个与上述功能相对应的模块或单元。例如,显示模块或单元、传输模块或单元和处理模块或单元等。
[0080] 另一方面,本申请实施例提供了一种电子设备,该电子设备可以包括屏幕,用于显示界面;一个或多个处理器;存储器;以及一个或多个计算机程序;其中,一个或多个计算机程序被存储在存储器中,一个或多个计算机程序包括指令;当指令被处理器执行时,使得电子设备执行上述方面任一项可能的设计中的目标对象的传输方法。
[0081] 又一方面,本申请实施例提供了一种电子设备,该电子设备可以包括一个或多个处理器;存储器;以及一个或多个计算机程序;其中,一个或多个计算机程序被存储在存储器中,一个或多个计算机程序包括指令;当指令被处理器执行时,使得电子设备执行上述方面任一项可能的设计中的目标对象的传输方法。
[0082] 另一方面,本申请实施例提供了一种计算机可读存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行上述方面任一项可能的设计中的目标对象的传输方法。
[0083] 又一方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行上述方面任一项可能的设计中的目标对象的传输方法。
[0084] 本申请其他方面的有益效果可以参见上述方法方面有益效果的相关描述,不予赘述。

附图说明

[0085] 图1A为现有技术提供的一种跨系统文件传输过程界面示意图;
[0086] 图1B为现有技术提供的一种跨系统文件传输过程示意图;
[0087] 图2为本申请实施例提供的一种目标对象的传输架构示意图;
[0088] 图3为本申请实施例提供的一种电子设备的结构示意图;
[0089] 图4为本申请实施例提供的另一种目标对象的传输架构示意图;
[0090] 图5为本申请实施例提供的一组界面示意图;
[0091] 图6A为本申请实施例提供的一种目标对象的传输过程示意图;
[0092] 图6B为本申请实施例提供的一种目标对象的传输流程图;
[0093] 图6C为本申请实施例提供的另一种目标对象的传输流程图;
[0094] 图7A为本申请实施例提供的一组拖拽传输文件的界面示意图;
[0095] 图7B为本申请实施例提供的另一组拖拽传输文件的界面示意图;
[0096] 图7C为本申请实施例提供的一组拖拽传输文本的界面示意图;
[0097] 图8A为本申请实施例提供的一种目标对象的传输过程示意图;
[0098] 图8B为本申请实施例提供的一种目标对象的传输流程图;
[0099] 图8C为本申请实施例提供的另一种目标对象的传输流程图;
[0100] 图9为本申请实施例提供的一组拖拽传输文件的界面示意图;
[0101] 图10为本申请实施例提供的一组确定目的端为Windows资源管理器的流程图;
[0102] 图11A为本申请实施例提供的一种目标对象的传输过程示意图;
[0103] 图11B为本申请实施例提供的一种目标对象的传输流程图;
[0104] 图11C为本申请实施例提供的另一种目标对象的传输流程图;
[0105] 图12为本申请实施例提供的一组拖拽传输文件的界面示意图;
[0106] 图13A为本申请实施例提供的一种目标对象的传输流程图;
[0107] 图13B为本申请实施例提供的另一种目标对象的传输流程图;
[0108] 图14为本申请实施例提供的一组复制文件的界面示意图;
[0109] 图15为本申请实施例提供的一组剪切文件的界面示意图;
[0110] 图16为本申请实施例提供的一组复制文本的界面示意图;
[0111] 图17为本申请实施例提供的一种目标对象的传输流程图;
[0112] 图18为本申请实施例提供的一组复制文件的界面示意图;
[0113] 图19为本申请实施例提供的一种目标对象的传输流程图;
[0114] 图20为本申请实施例提供的一组复制文件的界面示意图。

具体实施方式

[0115] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
[0116] 以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0117] 在本申请实施例中,“示例性地”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性地”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性地”或者“例如”等词旨在以具体方式呈现相关概念。
[0118] 目前,Android应用程序可以基于Android模拟器等虚拟化技术运行在Windows操作系统上。Windows操作系统与Android应用程序之间交互文件的过程中,需要用户进行多步、复杂的操作,用户使用体验较差。
[0119] 并且,如图1B所示,Android侧与Windows侧之间的文件传输,可通过安卓调试桥(android debug bridge,adb)工具来实现。其中,通过adb进行文件传输的本质是基于socket的TCP/IP通信,受带宽、网络延时等因素的限制,文件传输速度较慢;且文件传输依赖adb进程,一旦adb端口被占用或者adb未成功运行,则Android侧与Windows侧之间的通信就会断开,文件无法成功传输。
[0120] 本申请实施例提供了一种跨系统传输目标对象的方法,可以应用于电子设备。参见图2所示的传输架构示意图,该电子设备上运行有第一操作系统,第一操作系统上基于模拟器运行有第二操作系统的应用程序。在该方法中,电子设备能够基于用户的简单操作,实现第一操作系统的应用程序与第二操作系统的应用程序之间的目标对象的交互,以及第一操作系统上第二操作系统的不同应用程序之间的目标对象的交互。其中,该目标对象可以包括文件、文本或其他可传输对象。并且,用户的该简单操作更符合用户基于第一操作系统的使用习惯,用户使用体验较好。例如,用户的简单操作可以为一步拖拽操作,或者用户的简单操作可以为复制/剪切操作和粘贴操作等。
[0121] 此外,本申请实施例提供的方法不依赖adb、socket通信和网络能力等因素,不会受到这些因素的限制,因而文件传输速度快且安全可靠。
[0122] 其中,第一操作系统和第二操作系统为不同的操作系统。例如,第一操作系统可以为Windows操作系统、Linux操作系统、Unix操作系统、DOS操作系统或Mac OS操作系统等;第二操作系统可以为Android操作系统,iOS操作系统,鸿蒙Harmony操作系统,塞班Symbian操作系统,黑莓lackBerry操作系统,windows Mobile操作系统,或palm操作系统等。本申请实施例对第一操作系统和第二操作系统的具体类型不予限定。
[0123] 针对不同的第一操作系统和第二操作系统,用户的操作习惯也可能不同。例如,第一操作系统为Windows操作系统,对于运行有Windows操作系统的电脑等设备,用户通常习惯使用鼠标或快捷键等方式进行文件传输。再例如,第二操作系统为Android操作系统,对于运行有Windows操作系统的手机等设备,用户通常不使用鼠标或快捷键等方式进行文件传输。
[0124] 其中,图2所示的电子设备可以是台式电脑、笔记本电脑、桌面型电脑、超级移动个人计算机(ultra‑mobile personal computer,UMPC)或上网本等设备,本申请实施例对电子设备的具体类型不作任何限制。
[0125] 在一些实施例中,该电子设备可以通过图3所示的计算机系统300来实现。计算机系统300包括显示屏30,至少一个处理器301,通信总线302,存储器303以及至少一个通信接口304。
[0126] 显示屏30用于显示图像,视频等。显示屏30包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light‑emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active‑matrix organic light emitting diode的,AMOLED),柔性发光二极管(flex light‑emitting diode,FLED),Miniled,MicroLed,Micro‑oLed,量子点发光二极管(quantum dot light emitting diodes,QLED)等。在本申请的实施例中,显示屏30可以用于显示多个窗口,包括第一操作系统的应用程序的窗口,和/或第二操作系统的应用程序的窗口等内容。
[0127] 处理器301可以是一个通用中央处理器(central processing unit,CPU),微处理器,特定应用集成电路(application specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。处理器301可以运行第一操作系统,第一操作系统上可以基于模拟器运行第二操作系统的应用程序。
[0128] 通信总线302可包括一通路,在上述组件之间传送信息。
[0129] 通信接口304,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local area networks,WLAN)等。
[0130] 存储器303可以是只读存储器(read‑only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read‑only memory,EEPROM)、只读光盘(compact disc read‑only memory,CD‑ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
[0131] 其中,存储器303用于存储执行本申请方案的应用程序代码,并由处理器301来控制执行。处理器301用于执行存储器303中存储的应用程序代码,以控制计算机系统300实现本申请下述实施例提供的文件交互方法,从而基于一步拖拽操作,或基于复制/剪切和粘贴操作等用户的简单操作,实现第一操作系统的应用程序与第二操作系统的应用程序之间,以及第二操作系统的不同应用程序之间的目标对象的交互。
[0132] 可选的,本申请实施例中的计算机执行指令也可以称之为应用程序代码,本申请实施例对此不作具体限定。
[0133] 在具体实现中,作为一种实施例,处理器301可以包括一个或多个CPU,例如图3中的CPU0和CPU1,每个CPU可以支持多个虚拟CPU,虚拟CPU又称VCPU。
[0134] 在具体实现中,作为一种实施例,计算机系统300可以包括多个处理器,例如图3中的处理器301和处理器307。这些处理器中的每一个可以是一个单核(single‑CPU)处理器,也可以是一个多核(multi‑CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
[0135] 在具体实现中,作为一种实施例,计算机系统300还可以包括输出设备305和输入设备306。输出设备305和处理器301通信,可以以多种方式来显示信息。例如,输出设备305可以是液晶显示器(liquid crystal display,LCD),发光二级管(light emitting diode,LED)显示设备,阴极射线管(cathode ray tube,CRT)显示设备,或投影仪(projector)等。输入设备306和处理器301通信,可以以多种方式接受用户的输入。例如,输入设备306可以是鼠标、键盘、触摸屏设备或传感设备等。
[0136] 如前所述,电子设备上运行有第一操作系统,第一操作系统上运行有基于第一操作系统的应用程序(简称第一操作系统的应用程序),第一操作系统上基于模拟器运行有第二操作系统的应用程序。电子设备可以采用多窗口的形式,运行第一操作系统的应用程序。在本申请的实施例中,第一操作系统侧的窗口与第二操作系统侧的窗口之间一一对应。这样,第二操作系统的应用程序也可以通过多窗口的形式运行在电子设备上。并且,基于该窗口间的对应关系,电子设备可以根据第一操作系统侧的窗口标识确定对应的第二操作系统侧的窗口,也可以根据第二操作系统侧的窗口标识确定对应的第一操作系统侧的窗口。
[0137] 其中,继续参见图2,模拟器所运行的第一操作系统与第二操作系统之间可以基于管道通信技术进行通信交互,从而可以在第一操作系统的应用程序与第二操作系统的应用程序之间传输目标对象的过程中交互相关的信息,并在第二操作系统的不同应用程序之间传输目标对象的过程中交互相关的信息。通过如图2所示的共享文件夹技术,可以实现第一操作系统与第二操作系统之间共享目标对象。当第一操作系统的应用程序与第二操作系统的应用程序之间交互目标对象时,基于用户的简单操作,源端操作系统可以将待传输的目标对象自动存入共享文件夹,目的端操作系统可以自动从共享文件夹获取目标对象,并传输至目的应用程序的窗口。这样,结合第一操作系统与第二操作系统之间的管道通信以及共享文件夹技术,本申请实施例可以实现第一操作系统的应用程序与第二操作系统的应用程序之间的目标对象的交互,以及第一操作系统上运行的第二操作系统的不同应用程序之间的目标对象的交互。
[0138] 其中,该目标对象可以包括文件、文本或其他可传输对象。例如,该文件可以是视频文件、音频文件、文档、图片、快捷方式或压缩文件等;该文本可以是一段文字、一段数字或一段字符串等。也就是说,结合第一操作系统与第二操作系统之间的管道通信以及共享文件夹技术,第一操作系统与第二操作系统之间可以进行信息交互并共享文件、文本或其他可传输对象,从而可以实现第一操作系统的应用程序与第二操作系统的应用程序之间交互文件、文本或其他可传输对象,并实现第一操作系统上运行的第二操作系统的不同应用程序之间交互文件、文本或其他可传输对象。
[0139] 上述管道通信技术可以有多种,比如Qemu管道通信(Qemu Pipe Communication),或称Qemu Pipe通信。该Qemu Pipe通信通过虚拟设备来实现第二操作系统与模拟器之间的通信,通信速度快且稳定性高。在虚拟化领域中,存在模拟器的客户端(Guest)侧与主机端(Host)侧之间共享文件的用户需求。该共享文件夹技术可以通过多种技术来实现,例如基于virtio‑i/o虚拟化框架的计划9共享文件夹(plan 9folder sharing over Virtio‑I/O virtualization framework,Virtio‑9p共享文件夹)(简称9p共享文件夹)、虚拟块设备(virtual block device,VBD)、网络文件系统(network file system,NFS)和公共互联网文件系统(common internet file system,CIFS)、或虚拟机共享文件系统(shared file system for virtual machines,Virtio‑Fs)技术等,不予限定。其中,Virtio‑9p利用现有的9p协议(一种网络文件系统协议)以及Virtio驱动的架构,在Qemu后端实现了一个服务器(Server)端与具体的文件系统对接,真正实现Guest与Host间文件的共享及访问,故称之为Virtio‑9p。Virtio‑9p能够提供完备的功能支持和良好的性能。与Virtio‑9p相比,通过NFS、CIFS在虚拟机与宿主机之间共享文件时,数据的传输需要经过多次拷贝,且增加了一层网络开销,性能上有较大损耗。加上网络文件系统并非专为虚拟化设计,所以其支持的功能也不够完善。
[0140] 共享文件夹是打通安卓和Windows数据的桥梁,模拟器安卓应用在传输文件的时候需要访问Windows数据但无法直接获取,必须先调起安卓侧存储找到文件。此时在安卓侧存储中的第一个文件夹命名为“共享文件夹”,便于用户直接访问。对应的在Windows侧本地创建一个共享文件夹,本质上和安卓侧存储内的文件夹是一个文件夹,需要用户把待传输的文件拖入Windows侧的该文件夹后,安卓应用才能从安卓侧存储中找到该文件。
[0141] 如图4所示,以下实施例中将以第一操作系统为Windows操作系统,第二操作系统为Android操作系统,电子设备上运行了Windows操作系统,Windows操作系统基于Android模拟器运行有Android应用程序,模拟器的Host侧与Guest侧之间采用采用Qemu Pipe通信,共享文件夹技术采用Virtio‑9p,且电子设备为电脑为例,对本申请实施例提供的跨系统传输目标对象的方法进行阐述。
[0142] 其中,用于交互目标对象的Android应用程序,可以是Android操作系统的系统应用(例如Android文件管理),也可以是三方应用(例如社交类应用(比如微信、QQ)、图库、新闻类应用、视频类应用(比如抖音、快手等)或游戏类应用)。用于目标对象的Windows应用程序也可以是Windows操作系统的系统应用(比如Windows资源管理器、(文本编辑器)等),或三方应用(比如浏览器应用、视频类应用或游戏类应用等)。本申请实施例对用于交互目标对象的Android应用程序和Windows应用程序的具体类型不予限定。
[0143] Windows操作系统侧的窗口与Android操作系统侧的窗口之间一一对应。这样,Android应用程序可以通过多窗口的形式,运行在Windows操作系统之上。基于该窗口对应关系,Windows操作系统可以根据Windows侧的窗口标识(例如为窗口句柄,或者窗口句柄对应的显示标识displayid),确定对应的Android侧的窗口标识(例如为Android侧虚拟显示(VirtualDisplay)窗口的displayid);Android操作系统也可以根据Android侧的窗口标识,确定对应的Windows侧的窗口标识。示例性的,Windows侧的窗口标识为窗口句柄,Android侧的窗口标识为虚拟显示(VirtualDisplay)窗口displayid,该窗口对应关系为Windows侧的窗口句柄与Android侧的窗口displayid之间的一一对应关系。再示例性的,Windows侧的窗口标识为窗口句柄对应的窗口displayid,Android侧的窗口标识为窗口displayid,该窗口对应关系为Windows侧的窗口displayid与Android侧的窗口displayid之间的一一对应关系。
[0144] 例如,参见图5中的(a),电脑桌面上包括多个Windows应用程序的图标(比如Windows资源管理器的图标51和网络连接图标52等)和Android应用程序的图标(比如Android(安卓)文件管理的图标53、新闻头条的图标54和社交软件的图标55等)。并且,屏幕上显示有Windows资源管理器的窗口501。响应于用户针对Android文件管理的图标502的操作,电脑运行Android文件管理,并如图5中的(b)所示,在屏幕上也显示Android文件管理的窗口503。
[0145] 其中,Windows操作系统也可以称为Android模拟器的主机端(Host),Android操作系统也可以称为Android模拟器的客户端(Guest)。由于Android模拟器运行在Windows操作系统之上,因而Android模拟器可以理解为Windows侧的应用程序。Android模拟器与Android应用程序之间的交互,也可以理解为Android模拟器的Host侧与Guest侧之间的交互。
[0146] 在本申请的实施例中,Android模拟器与Android操作系统之间(即Android模拟器的Host侧与Guest侧之间)可以基于Qemu Pipe进行通信交互,从而可以在Windows应用程序与Android应用程序之间传输目标对象的过程中交互相关的信息,并在Android不同应用程序之间传输目标对象的过程中交互相关的信息。这里“相关的信息”是指,除目标对象的数据内容以外,Host侧与Guest侧在目标对象的传输过程中交互的消息或信令等信息。通过9p共享文件夹技术可以实现Windows操作系统与Android操作系统之间共享目标对象。当Windows操作系统的应用程序与Android应用程序之间传输目标对象时,基于用户的简单操作,源端操作系统可以将待传输的目标对象自动存入9p共享文件夹,目的端操作系统可以自动从9p共享文件夹获取目标对象,并传输至目的应用程序的窗口。这样,结合Android模拟器的Host与Guest之间的Qemu Pipe通信以及9p共享文件夹技术,本申请实施例可以实现Windows应用程序与Android应用程序之间的目标对象的交互,以及Windows操作系统上不同Android应用程序之间的目标对象的交互。
[0147] 基于本申请实施例提供的方法,电脑能够基于用户的一步拖拽操作,或者用户的复制/剪切和粘贴操作等简单操作,实现Android应用程序与Windows应用程序之间交互目标对象,以及Android不同应用程序之间交互目标对象。并且,用户触发交互目标对象的简单操作,符合用户基于Windows操作系统的使用习惯,因而用户使用体验较好。
[0148] 以下针对不同交互场景分别进行阐述。
[0149] 场景(1)、一步拖拽实现Windows应用程序到Android应用程序的文件传输:
[0150] 在该交互场景中,用户可以通过鼠标或触摸屏等输入设备,将电脑屏幕上显示的Windows应用程序窗口中的目标对象,拖拽至Android应用程序的窗口。电脑响应于用户的拖拽操作,将Windows应用程序中的目标对象传输至Android应用程序,实现Windows应用程序到Android应用程序的目标对象的复制。
[0151] 在一些实施例中,在该交互场景中,参见图6A,Android模拟器的Host侧和Guest侧之间基于Qemu Pipe进行通信交互。Host侧产生Windows侧拖拽事件(如对象连接与嵌入拖/放(object linking and embedding Drag/Drop,OLE Drag/Drop)拖拽事件)后,将目标文件从Windows应用程序传输至Windows资源管理器,Windows资源管理器将目标文件拷贝至9p共享文件夹。Guest侧从9p共享文件夹读取该目标文件,获取目标文件的统一资源标识符(Uniform Resource Identifier,URI),实现安卓内部目标文件的传输,从而将目标文件传输至Android应用程序。
[0152] 或者,在该交互场景下,参见图6A,Android模拟器的Host侧和Guest侧之间基于Qemu Pipe进行通信交互,Host侧产生Windows侧拖拽事件(如OLE Drag/Drop拖拽事件)后,基于Qemu Pipe将目标文本通知给Guest侧。Guest侧实现安卓内部目标文本的传输,从而将目标文本传输至Android应用程序。
[0153] 在另一些实施例中,在该交互场景中,参见图6B,本申请提供的跨系统传输目标对象的方法可以包括以下流程:目标对象由Windows资源管理器等Windows应用程序的窗口,拖拽进入安卓应用程序的窗口。循环执行以下步骤直至目标对象移出安卓应用程序的窗口或者目标对象被拖拽释放:安卓模拟器的Host侧基于管道通信Qemu Pipe将拖入事件通知给Guest侧(即安卓系统),包括通知拖拽位置坐标、拖拽位置进入的安卓侧窗口标识和目标对象类型等信息,该目标对象类型用于表示拖拽的目标对象所属的类型,比如该目标对象类型可以为文件或文本等;Guest侧基于Qemu Pipe向Host侧回复是否允许拖入;Host侧根据Guest侧回复的是否允许拖入的信息显示拖拽样式(或称拖拽标识),比如该拖拽样式包括禁止/允许拖拽标识等。在目标对象被释放后,Host侧基于Qemu Pipe将拖拽释放事件通知给Guest侧,包括通知拖拽释放位置对应的安卓侧窗口标识,拖拽释放位置坐标,目标对象类型,目标对象为目标文件时目标文件包括的文件数量和文件总大小,以及目标对象为目标文本时的文本长度和文本内容等信息。若Guest侧确定拖拽释放位置允许拖拽,则构建空的拖拽开始事件。Guest侧基于Qemu Pipe向Host侧回复是否允许拖入。若Host侧根据Guest侧的回复确定不允许拖入,则Host侧结束拖拽;若确定允许拖入,则执行后续流程。
[0154] 若目标对象类型为文件,则参见图6B,循环执行以下步骤:Host侧将目标文件中的单个文件依次拷贝至9p共享文件夹,并通知Gue st侧单个文件拷贝完成;Host侧获取单个文件的URI,通过URI读取文件,并构建单个文件的拖拽事件。参见图6B,Host侧在目标文件的所有文件拷贝完成后通知Guest侧;Guest侧通过拖拽事件将目标文件传输至指定的拖拽释放目的安卓应用窗口。若目标对象类型为文本,则参见图6B,Guest侧根据文本内容构建拖拽事件,将目标文本传输至指定的拖拽释放目的安卓应用窗口。而后,继续参见图6B,Guest侧构建空的拖拽结束事件,从而结束目标对象的拖拽传输过程。其中,图6B中的可变(atler,Alt)表示目标对象类型可改变,可以为“文件”,或者为“文本”。
[0155] 在其他一些实施例中,结合图6C所示的流程图及图7A‑图7C所示的界面示意图,对本申请提供的跨系统传输目标对象的方法进行详细说明:
[0156] 601、Host侧检测到Windows应用程序窗口中的目标对象被触发拖拽。
[0157] 比如,Host侧检测到触发拖拽对应的鼠标事件,该鼠标事件用于表示从Windows应用程序的窗口中开始拖拽目标对象。示例性的,如图7A中的(a)所示,用户通过鼠标选中Windows资源管理器的窗口701中的目标对象(比如该目标对象包括文档1和文档2),并开始拖拽该目标对象,此时Host侧检测到触发拖拽对应的鼠标事件。
[0158] 在拖拽开始后,Host侧可以通过获取拖拽源窗口的窗口标识(比如句柄),然后遍历维护的窗口标识的对应关系,若该对应关系中存在拖拽源窗口的窗口标识对应的窗口标识,则可以判断拖拽源窗口为Android应用程序窗口;否则拖拽源窗口为Windosws应用程序窗口。在步骤601中,拖拽源窗口为Windows应用程序的窗口。
[0159] 在拖拽过程中,Host侧可以显示目标对象对应的拖拽图标,该拖拽图标由拖拽源窗口决定。示例性的,参见图7A中的(a),在拖拽过程中,在鼠标的光标位置实时显示有拖拽图标702。
[0160] 可选地,在拖拽过程中,电脑还可以提示用户当前拖拽位置是否允许拖入目标对象,该方法还可以包括步骤602‑604:
[0161] 602、若目标对象的拖拽位置进入Android应用程序的窗口,则Host侧基于Qemu Pipe将拖拽信息1通知给Guest侧,该拖拽信息1包括拖拽位置坐标、拖拽位置对应的Android侧窗口标识和目标对象类型。
[0162] 其中,拖拽位置是指目标对象在拖拽过程中所处的位置。具体的,Android应用程序窗口注册为OLE Drag/Drop拖拽窗口,当有OLE Drag/Drop拖拽事件进入Android应用窗口后,会触发IDropTarget::DragEnter()接口,通过该接口可获知目标对象的拖拽位置进入了Android应用程序的窗口。目标对象的拖拽位置进入Android应用程序的窗口后,Host侧通知Guest侧发生拖拽事件(或发生拖入事件)。
[0163] Host侧可以将拖拽信息1通知给Guest侧。例如,Host侧可以将目标对象类型通知给Guest侧,以便Guest侧获知待传输目标对象的类型,并确定拖拽位置或释放位置是否允许拖入该类型的目标对象。该目标对象类型可以包括文件或文本等可传输对象。比如,目标文本通过Qemu Pipe可以实现跨系统传输,而目标文件需要通过9p共享文件夹进行中转才能实现跨系统传输。
[0164] Host侧还可以将拖拽位置对应的Android侧窗口标识通知给Guest侧,以便Guest侧确定拖拽位置对应的Android应用程序是否允许拖入目标对象。
[0165] Host侧还可以将拖拽位置坐标通知给Guest侧,以便Guest侧的Android应用程序确定当前拖拽位置是否允许拖入目标对象。
[0166] 此外,拖拽信息1还可以包括本次拖拽的其他相关信息,这里不予限定。
[0167] 603、Guest侧根据拖拽信息1判断拖拽位置对应的Android侧窗口和拖拽位置是否允许拖入该目标对象类型对应的目标对象,并基于Qemu Pipe将判断结果通知给Host侧。
[0168] Guest侧可以根据拖拽位置坐标、拖拽位置对应的Android侧的窗口标识,以及拖拽进入的Android侧窗口对应的Android应用程序自身的处理逻辑,判断该Android侧窗口内的当前拖拽位置是否允许拖入目标对象。
[0169] 604、Host侧根据Guest侧通知的判断结果,提示用户当前Android侧窗口中的拖拽位置是否允许拖入目标对象。
[0170] 在一些实施例中,Host侧将来自Guest侧的判断结果通知给拖拽源窗口,源窗口通过相应的逻辑改变拖拽图标的状态,从而提示用户当前Android侧窗口中的拖拽位置是否允许拖入目标对象。
[0171] 在另一些实施例中,若拖拽位置所在的Android侧窗口不允许拖入目标对象,则电脑可以通过显示禁止拖拽标识来提示用户;若拖拽位置所在的Android侧窗口允许拖入目标对象,则电脑不显示禁止拖拽标识。示例性的,禁止拖拽标识可以参见图7A中的(a)所示的标识703。
[0172] 在另一些实施例中,若拖拽位置所在的Android侧窗口不允许拖入目标对象,则电脑可以显示禁止拖拽标识来提示用户;若拖拽位置所在的Android侧窗口允许拖入目标对象,则电脑可以显示允许拖拽标识来提示用户。
[0173] 这样,基于禁止/允许拖拽标识,用户根据该标识可以直观地获知,是否可以在当前Android侧窗口中的当前拖拽位置释放目标对象。
[0174] 当拖拽位置在Android应用程序的窗口内移动时会触发IDropTarget::DragOver()接口,通过该接口可获知拖拽位置当前正在Android应用程序的窗口内移动。Host侧基于Qemu Pipe将移动后的实时的拖拽位置坐标通知给Guest侧。Guest侧判断当前拖拽位置是否允许拖入目标对象,并基于Qemu Pipe将判断结果通知给Host侧。Host侧根据Guest侧通知的判断结果,提示用户当前拖拽位置是否允许拖入目标对象。
[0175] 另外,若拖拽位置离开Android应用程序窗口则会触发IDropTarget::DragLeave()接口,通过该接口可获知拖拽位置已经移出Android应用程序的窗口。
[0176] 此外,若拖拽位置进入其他Windows应用程序的窗口,则Host侧按照Windows操作系统的拖拽流程进行处理。
[0177] 605、在Host侧检测到拖拽的目标对象被释放后,若拖拽释放窗口为Android应用程序的窗口,则Host侧基于Qemu Pipe将拖拽信息2通知给Guest侧,该拖拽信息2包括拖拽释放位置坐标、拖拽释放窗口对应的Android侧窗口标识、目标对象类型和传输类型。
[0178] 比如,Host侧检测到释放对应的鼠标事件,该鼠标事件用于表示拖拽的目标对象被释放。示例性的,参见图7A中的(b),用户通过鼠标将目标对象拖入Android文件管理窗口704后,通过鼠标释放拖拽的目标对象,此时Host侧检测到释放对应的鼠标事件。
[0179] 在用户释放拖拽的目标对象后,Host侧可以基于Qemu Pipe将拖拽释放事件通知给Guest侧。其中,Host侧可以将拖拽信息2通知给Guest侧。该拖拽信息2可以包括拖拽释放位置坐标、拖拽释放窗口对应的Android侧窗口标识、目标对象类型和传输类型。该拖拽信息2还可以包括拖拽相关的其他信息,比如当目标对象为目标文件时还包括文件数量,文件总大小;当目标文件为目标文本时还包括文本内容或文本长度等信息。本申请实施例对拖拽信息2的具体内容不于限定。其中,文本数量可以用于在拖拽传输过程中,提示用户总共拖拽几个文件,当前正在传输第几个文件等信息。文件总大小可以用于在拖拽传输过程中提示用户当前的传输进度。文本长度可以用于目的端将该文本长度与传输获取的文本内容的实际长度进行对比,以确认是否正确接收到拖拽传输的文本内容。
[0180] 需要说明的是,当目标对象为目标文本时,Host侧可以在拖拽进入安卓应用程序窗口后,将目标文本(即文本内容)传输给Guest侧;也可以在获知Guest侧允许拖入后,将目标文本传输给Guest侧;也可以在拖拽释放在安卓应用程序窗口后,将目标文本传输给Guest侧;或者,Host侧也可以在其他时机将目标文本传输给Guest侧,不予限定。
[0181] 其中,传输类型包括Windows应用程序与Android应用程序之间的传输,或者Android应用程序之间的传输等。Guest侧可以根据具体的传输类型,对目标对象进行相应的传输处理。
[0182] 当拖拽位置在Android应用程序的窗口中释放时会触发IDropTarget::Drop()接口,通过该接口可获知所拖拽的目标对象在Android应用程序的窗口内释放。
[0183] 在步骤605中,若拖拽释放窗口为Android应用程序的窗口,则由于拖拽源窗口为Windows应用程序的窗口,因而该传输类型为Windows应用程序与Android应用程序之间的传输。
[0184] 其中,当目标对象类型为文件时,目标对象为目标文件,用户释放拖拽的目标文件后,Host侧还可以基于Qemu Pipe将目标文件的文件名、目标文件的总大小和目标文件包括的文件数量等信息通知给Guest侧,以便Guest侧的拖拽目的端获知待传输目标文件的其他相关信息。当目标对象类型为文本时,目标对象为目标文本,Host侧还可以基于Qemu Pipe将目标文本的长度等信息通知给Guest侧。
[0185] 在其他一些实施例中,目标文件的文件名、目标文件的总大小和目标文件包括的文件数量,或文本长度等信息,也可以在拖拽释放前,在拖拽位置刚进入Android应用程序的窗口后,由Host侧通知给Guest侧;或者,还可以在其他时机由Host侧通知给Guest侧,不予限定。
[0186] 而后,若目标对象类型为文件,则执行步骤606‑609;若目标对象类型为文本,则执行步骤610‑611。
[0187] 606、Guest侧根据拖拽信息2判断拖拽释放窗口及释放位置是否允许拖入目标对象,若允许拖入则构建空的拖拽开始事件。
[0188] Guest侧可以根据拖拽释放窗口对应的Android侧窗口标识,确定拖拽释放的Android应用程序的窗口是否允许拖入目标对象类型对应的目标对象。Guest侧可以根据拖拽释放位置坐标,确定释放位置是否允许拖入目标对象类型对应的目标对象。
[0189] 若允许拖入,则Guest侧构建空的拖拽开始事件。构建空的拖拽开始事件是为了获取拖拽起始坐标所在的窗口。拖拽过程中,如果窗口变化了,会把拖拽开始保存的窗口赋值给拖拽事件,拖拽事件响应的还是拖拽开始的窗口,更加符合用户的预期。
[0190] Guest侧还可以根据拖拽信息2确定传输类型为Windows应用程序与Android应用程序之间的传输,从而执行相应的传输流程。
[0191] 此外,当目标对象类型为文件时,Guest侧还可以根据目标文件的总大小,判断Android系统所剩磁盘空间是否大于目标文件的总大小,进行容量等检查。
[0192] 607、若Guest侧确定允许拖入目标对象,且目标对象为目标文件,则Guest侧基于Qemu Pipe通知Host侧允许拖入并通知Host侧传输目标文件。
[0193] 若Guest侧确定拖拽释放的Android应用程序的窗口及释放位置允许拖入目标对象,目标对象为目标文件,且Android系统所剩磁盘空间大于或者等于目标文件的文件总大小,则Guest侧构建空的拖拽开始事件,用于标志此次拖拽事件的开始。并且,Guest侧通知Host侧开始传输目标文件。需要说明的是,在本申请实施例中,在目标对象的传输过程中,Host侧与Guest侧之间的通信交互通过Qemu Pipe来实现,不予一一说明。
[0194] 若Guest侧确定拖拽释放的Android应用程序的窗口或释放位置不允许拖入目标对象,则Host侧通知源窗口结束本次拖拽。
[0195] 608、Host侧将目标文件拷贝至9p共享文件夹,基于Qemu Pipe将目标文件的文件名信息通知给Guest侧,并在目标文件拷贝完成后通知Guest侧。
[0196] 609、Guest侧根据目标文件的文件名信息,从9p共享文件夹中获取目标文件,并根据目标文件构建Android侧拖拽事件,实现目标文件到目的端Android应用程序的传输。
[0197] Guest侧从9p共享文件夹中读取目标文件后,根据目标文件的数据构建Android侧的拖拽事件。其中,Android系统的媒体库是一个数据库文件,当系统启动完成或者收到相关广播消息时,Android系统会扫描文件系统中的数据,将新增和删除的文件信息更新到媒体库中。应用程序可以通过URI从媒体库中读取文件系统中的文件信息。Host侧将目标文件拷贝至9p共享文件夹中后,会通知Guest侧目标文件的文件名,Guest侧根据文件名和9p共享文件夹的路径可读取到该目标文件。在一些方案中,Guest侧将该目标文件添加至媒体库,获取该目标文件对应的URI,之后就可以通过URI去媒体库中快速读取该目标文件,并根据该目标文件构建拖拽事件。
[0198] Guest侧将拖拽事件下发给目的端Android应用程序和释放位置,这样可以模拟Android操作系统的拖拽传输,实现目标文件到目的Android应用程序及释放位置的传输,从而实现目标文件从Windows应用程序到Android应用程序的传输。
[0199] 在一些实施例中,在上述步骤608中,Host侧可以将文件名信息和时间戳信息通知给Guest侧。该时间戳信息用于标记不同时间对应的不同次拖拽的文件。这样,即便多次拖拽的目标文件有相同的文件名,目的端也可以基于该时间戳信息准确地获取到每次拖拽分别对应的文件内容,而不会出现本次拖拽的文件被上一次拖拽的重名文件所覆盖的情况。
[0200] 其中,在步骤608‑609的一种技术方案中,当一次拖拽的目标文件包括多个文件时,Host侧拷贝完目标文件中的全部文件至9p共享文件夹后,通知Guest侧拷贝完成。Guest侧从9p共享文件夹中读取拷贝完成的目标文件,并构建Android侧拖拽事件,实现9P共享文件夹至Android应用程序的目标文件的传输。
[0201] 在步骤608‑609的另一种技术方案中,当一次拖拽的目标文件包括多个文件时,Host侧每拷贝完一个文件至9p共享文件夹,就通知Guest侧该单个文件拷贝完成。Guest侧从9p共享文件夹中读取拷贝完成的该文件,并构建Android侧拖拽事件,实现9P共享文件夹至Android应用程序的目标文件的传输。
[0202] 在该方案中,Host侧每拷贝完一个文件都将该单个文件的文件名信息通知Guest侧,Guest侧根据文件名和9p共享文件夹的路径可读取到该单个文件,然后将该单个文件添加至媒体库,获取该文件对应的URI,之后就可以通过URI去媒体库中快速读取该单个文件,并构建单个文件的拖拽事件。Guest侧将该拖拽事件下发给目的端应用程序及释放位置,从而将单个文件传输至目的应用程序的拖拽释放位置。Host侧待一次拖拽所有目标文件拷贝完成后,通知Guest侧。
[0203] 基于该方案,Host侧每拷贝完一个文件,Guest侧就可以及时获取到该文件并构建Android侧拖拽事件,而不用等到目标文件中的全部文件都拷贝完成后再获取文件并传输,可以减少等待时延,提高文件传输效率。
[0204] 其中,Guest侧构建的拖拽事件(比如单个文件的拖拽事件)可以包括如下四个事件:拖拽开始事件DragEvent.ACTION_DRAG_STARTED,拖拽在目标窗口中的位置事件DragEvent.ACTION_DRAG_LOCATION,拖拽释放事件DragEvent.ACTION_DROP,以及拖拽结束事件DragEvent.ACTION_DRAG_ENDED。上述四个事件一次性地通知给目的窗口的释放位置,即可模拟一次完整的拖拽事件。
[0205] 值得说明的是,原生Android系统本身不会产生拖拽事件,需要应用程序进行处理,当鼠标点中或触摸文件一定时间后,Android系统会回调onLongClick消息,通过调用接口startDrag()可以激活拖拽。在本申请实施例中,拖拽效果是通过Windows侧的拖拽事件实现的,Android侧不需要调用startDrag()方法,只需要Host侧将DragEvent拖拽事件通知给目的窗口的相应位置即可。
[0206] 若目标对象类型为文本,则在用户释放拖拽的目标对象之后,该方法还包括:
[0207] 610、在Host侧检测到拖拽的目标对象被释放后,若目标对象为目标文本,则Host侧基于Qemu Pipe将目标文本通知给Guest侧。
[0208] 由于目标文本的数据量相对于文件来说通常较小,因而在拖拽的目标文本被释放后,Host侧可以基于Qemu Pipe将目标文本的文本内容通知给Guest侧,而不用通过9p文件夹进行中转,因而传输速度更快。
[0209] 如前所述,目标文本也可以在通知拖入事件时通知给Guest侧,在获知Guest侧允许拖入后通知给Guest侧,或者在其他时机通知给Guest侧。
[0210] 在步骤605之后,该方法还包括:
[0211] 611、若Guest侧根据拖拽信息2判断拖拽释放窗口及释放位置允许拖入目标对象,则构建空的拖拽开始事件,并根据目标文本构建Android侧拖拽事件,实现目标文本到目的端Android应用程序的传输。
[0212] 其中,该拖拽开始事件的数据为空;Guest侧根据目标文本构建的Android侧拖拽事件是根据数据“目标文本”构建的,数据不为空。
[0213] 在另一些实施例中,若目标对象类型为文本,则作为步骤610‑611的一种替换方案,在步骤605之后,该方法还包括:
[0214] 若Guest侧确定允许拖入目标对象,且目标对象为目标文本,则Guest侧构建空的拖拽开始事件,并基于Qemu Pipe通知Host侧允许拖入并请求传输目标文本。Host侧基于Qemu Pipe将目标文本传输给Guest侧。Guest侧根据目标文本构建Android侧拖拽事件,实现目标文本到目的端Android应用程序的传输。
[0215] 如图6C所示,在步骤609或步骤611之后,该方法还可以包括:
[0216] 612、Guest侧构建空的拖拽结束事件,目的端Android应用程序根据目标对象和释放位置进行相应处理。
[0217] Guest侧可以构建空的拖拽结束事件,表示本次目标对象的拖拽传输过程结束。并且,当目标对象传输至Guest侧目的端Android应用程序后,目的端Android应用程序可以基于Android操作系统的拖拽流程以及具体的释放位置,对目标对象进行相应的处理。比如,目标对象为目标文件,释放位置位于Android文件管理的窗口,Android文件管理将目标文件放在释放位置对应的目录下;再比如,释放位置位于Android文件管理的窗口中某个文件夹所在的位置,则Android文件管理将目标文件放在该文件夹对应的目录下;再比如,释放位置位于Android社交应用窗口的信息编辑窗口内,Android社交应用(例如微信 或QQ等)将目标文件发送给联系对象(比如其他联系人或其他设备)。比如,目标对象为目标文本,释放位置位于Android社交应用窗口的信息编辑窗口内,Android社交应用将目标文本发送给联系人;再比如,目标对象为目标文本,释放位置位于Android文本编辑器的窗口内,Android文本编辑器将目标文本插入到窗口内的拖拽释放位置。
[0218] 示例性的,基于图7A中的(a)‑(b)所示的用户将目标文件从Windows资源管理器窗口到Android文件管理窗口的拖拽操作,参见图7A中的(c),Android文件管理窗口704中添加了目标文件,即添加了文档1和文档2,实现了目标文件从Windows资源管理器到Android文件管理的复制。
[0219] 在一些实施例中,当目标对象为目标文件时,在目标文件的传输过程中,Host侧还可以显示传输进度条。例如,该传输进度条为复制进度条,Guest侧通知Host侧开始传输目标文件后,复制进度条开始显示。在Guest侧将目标文件传输到Android应用程序后,复制进度条显示完成。示例性的,复制进度条可以参见图7A中的(d)所示的控件705。此外,在拖拽传输过程中,进度条还可以根据文件数量提示用户总共拖拽几个文件,当前正在传输第几个文件等信息。进度条还可以根据文件总大小,提示用户当前的传输进度。
[0220] 需要说明的是,图7A是以Windows应用程序为Windows资源管理器,Android应用程序为Android文件管理为例进行说明的,当Windows应用程序和Android应用程序为其他应用程序时,仍可以采用以上实施例提供的方法,实现从Windows应用程序到Android应用程序的文件传输,此处不再一一举例。其中,当Windows应用程序为Windows资源管理器以外的其他Windows应用程序时,该其他Windows应用程序本身支持拖拽至其他应用程序,且可以通过调用OLE Drag/Drop接口实现拖拽。
[0221] 示例性的,目标对象为目标文件,Windows应用程序为Windows资源管理器,Android应用程序为Android社交应用,参见图7B中的(a)‑(b),用户将目标文件从Windows资源管理器窗口拖拽到Android社交应用窗口中的信息编辑窗口后,Android社交应用窗口中添加了目标文件,且目标文件发送给了Android社交应用的聊天界面中的联系人,实现了目标文件从Windows资源管理器到Android社交应用的复制。
[0222] 再示例性的,目标对象为目标文本,参见图7C中的(a),用户从Windows应用程序1的窗口710中开始拖拽目标文本“鸿蒙操作系统是一款基于微内核的面向全场景的分布式操作系统”。用户将目标文本拖拽至Android应用程序(如安卓社交应用)窗口720的信息编辑窗口后,释放拖拽的目标文本。基于图7C中的(a)所示的用户将目标文本从Windows应用程序(如Windows应用程序1)的窗口710到Android应用程序(如Android社交应用)的窗口720中信息编辑窗口的拖拽操作,参见图7C中的(b),Android应用程序的窗口中添加了目标文本,且目标文本发送给了聊天界面对应的联系人,实现了目标文本从Windows应用程序到Android应用程序的复制。可选地,如图7C中的(a)所示,在拖拽过程中还可以显示拖拽图标
730。
[0223] 需要说明的是,在场景(1)中,以上多个实施例中的部分或全部步骤(例如图6C所示流程中的部分步骤),在不冲突的情况下,可以重新组合,从而构成新的实施例。本申请实施例对此不再具体说明。
[0224] 可见,针对上述场景(1),本申请实施例通过Qemu Pipe通信可以实现Android模拟器Host侧与Guest侧之间进行通信交互,基于Windows侧窗口标识与Android侧窗口标识的一一对应关系,可以根据拖拽释放位置所在的Windows侧窗口确定目的端Android应用程序的窗口,并且通过Virtio‑9p实现Windows侧与Android侧的文件共享,通过Qemu Pipe实现Windows侧与Android侧的文本共享,从而实现Android应用程序与Windows应用程序之间拖拽传输文件或文本。
[0225] 在图6A‑图7C描述的方案中,基于用户将目标对象从源端Windows应用程序的窗口,拖拽至目的端Android应用程序的窗口的简单的一步拖拽操作,即可实现Windows应用程序到Android应用程序的目标对象的传输,而不用像现有技术那样需要用户进行多步、复杂的操作。并且,用户通过鼠标等输入设备在窗口间的拖拽操作,更符合用户基于Windows操作系统和电脑的操作使用习惯,因而用户使用体验较好,能够增加产品的竞争力。而且,该方案不需要像现有技术那样依赖adb、socket通信和网络能力等因素,不会受到这些因素的限制,因而文件传输速度快且安全可靠。
[0226] 场景(2)、一步拖拽实现Android应用程序到Windows应用程序的文件传输:
[0227] 在该交互场景中,用户可以通过鼠标或触摸屏等输入设备,将电脑屏幕上显示的Android应用程序窗口中的目标对象,拖拽至Windows应用程序的窗口中。电脑响应于用户的拖拽操作,将Android应用程序中的目标对象传输至Windows应用程序,实现Android应用程序到Windows应用程序的目标对象的复制。
[0228] 在一些实施例中,在该交互场景下,参见图8A,拖拽源Android应用程序触发拖拽目标文件,Android模拟器的Guest侧(即安卓系统)将目标文件拷贝至9p共享文件夹,然后通过Qemu Pipe通信通知Host侧。Host侧从9p共享文件夹中将目标文件剪切至拖拽释放的Windows资源管理器。或者,Host侧从9p共享文件夹读取该目标文件,并根据目标文件构建Windows侧拖拽事件(如OLE Drag/Drop拖拽事件),将目标文件传输至Windows资源管理器以外的其他Windows应用程序。
[0229] 或者,在该交互场景下,参见图8A,拖拽源Android应用程序触发拖拽目标文本,Guest侧基于Qemu Pipe将目标文本(即文本内容)通知给Host侧。Host侧构建Windows侧拖拽事件(如OLE Drag/Drop拖拽事件),将目标文本传输至Windows应用程序。
[0230] 在另一些实施例中,在该交互场景下,参见图8B,本申请提供的跨系统传输目标对象的方法可以包括以下流程:拖拽源Android应用程序触发拖拽,安卓模拟器Guest侧(即Android系统)基于管道通信Qemu Pipe向Host侧通知拖拽事件,包括通知拖拽位置对应的安卓侧窗口标识,目标对象类型,当目标对象为目标文件时的文件名信息(比如文件名拼接)、文件总大小和文件数量,以及目标对象为目标文本时的文本长度和文本内容等信息。若目标对象类型为文件,则Host侧构建Windows侧拖拽事件(如OLE Drag/Drop拖拽事件)。
若拖拽释放的目的窗口为Windows应用程序的窗口,则Host侧还可以进行权限或容量等检查。Host侧基于Qemu Pipe通知Guest侧开始传输文件。Guest侧将目标文件拷贝至9p共享文件夹。
[0231] 而后,继续参见图8B,若拖拽释放的目的端为Windows资源管理器,则Guest侧基于Qemu Pipe依次将目标文件中单个文件的文件名称,以及文件索引(比如可以表示当前文件为目标文件中的第几个文件等)或文件大小等信息通知给Host侧。Host侧取消OLE Drag/Drop拖拽事件,将目标文件中的单个文件依次剪切至Windows资源管理器。或者,若拖拽释放的目的端为Windows资源管理器以外的其他Windows应用程序,则待所有文件传输至9p共享文件夹后,Guest侧通知Host侧所有文件拷贝完成,Host侧结束Windows侧拖拽事件,IDropSource::QueryContinueDrag()接口返回DRAGDROP_S_DROP状态,标志当前拖拽结束。Host侧响应于该拖拽结束事件,将目标文件传输至目的Windows应用程序。
[0232] 参见图8B,若目标对象类型为文本,则在Guest侧通知Host侧拖拽事件后,Host侧构建Windows侧拖拽事件。若拖拽释放的目的端为Windows资源管理器,则Host侧取消Windows侧拖拽事件,并将目标文本剪切至Windows资源管理器。若拖拽释放的目的端为Windows资源管理器以外的其他Windows应用程序,则Host侧结束Windows侧拖拽事件,Host侧响应于该拖拽结束事件,将目标文本传输至目的Windows应用程序。Host侧通知Guest侧结束拖拽。
[0233] 在其他一些实施例中,结合图8C所示的流程图及图9所示的界面示意图,对本申请提供的跨系统传输目标对象的方法进行详细说明:
[0234] 800、Guest侧检测到Android应用程序的窗口中的目标对象被触发拖拽,拖拽源Android应用程序触发拖拽事件。
[0235] 比如,Guest侧检测到触发拖拽对应的鼠标事件,该鼠标事件用于表示从Android应用程序的窗口中开始拖拽目标对象。示例性的,参见图9中的(a),用户通过鼠标选中Android文件管理的窗口901中的目标对象,即图片b,并开始拖拽该目标对象,此时Guest侧检测到触发拖拽对应的该鼠标事件。
[0236] 在开始拖拽后,Host侧可以通过获取拖拽源窗口的窗口标识(比如句柄),然后遍历维护的窗口标识的对应关系,若该对应关系中不存在拖拽源窗口的窗口标识对应的窗口标识,则可以判断拖拽源窗口为Windows应用程序窗口;否则拖拽源窗口为Android应用程序窗口。在步骤800中,拖拽源窗口为Windows应用程序的窗口。
[0237] 801、Guest侧将拖拽信息3通知给Host侧,该拖拽信息3包括拖拽源窗口对应的Android侧窗口标识和目标对象类型。
[0238] 拖拽源Android应用触发拖拽事件后,Guest侧可以将该拖拽事件通知给Host侧。Guest侧可以将拖拽信息3通知给Host侧,该拖拽信息3可以包括拖拽源窗口对应的Android侧窗口标识和目标对象类型,以便Host侧获知拖拽源端和待传输的目标对象的具体类型。
其中,该目标对象类型可以为文件或文本等。
[0239] 此外,如果目标对象为目标文件,则该拖拽信息3还可以包括目标文件的总大小和目标文件包括的文件数量等信息。如果目标对象为目标文本,则该拖拽信息3还可以包括目标文本的长度或目标文本的内容等信息。
[0240] 若目标对象为目标文本,则执行步骤804。可选地,如果目标对象为目标文件,则在步骤804之前还执行步骤802‑803。
[0241] 802、若目标对象为目标文件,则Guest侧还将目标对象的文件名信息和拖拽图标通知给Host侧。
[0242] 该文件名信息用于表示待传输目标文件的文件名。当目标文件包括多个文件时,该文件名信息可以为文件名拼接信息,例如为1.txt|2.txt|3.txt。
[0243] 803、Host侧根据文件名信息构建Windows侧拖拽事件,并设置拖拽图标。
[0244] 例如,Host侧可以根据文件名拼接信息构建Windows侧的OLE Drag/Drop拖拽事件。该拖拽事件可以指定拖拽图标。Host侧可以在拖拽过程中跟随拖拽位置(例如拖拽过程中鼠标的光标所在位置)实时显示拖拽图标。该拖拽图标可以使得用户直观地获知当前正在拖拽文件以及当前的拖拽位置。
[0245] 在一些实施例中,该拖拽图标可以用于表示目标文件的类型、目标文件包括的数量、目标文件的总大小、目标文件源端应用程序对应的图标或源端应用程序对应的操作系统等信息中的一种或多种。比如,该拖拽图标可以为目标文件包括的文件的缩略图。示例性的,参见图9中的(a),在拖拽过程中,鼠标的光标位置实时显示有拖拽图标902,该拖拽图标902的右上角显示有数字2,表示拖拽的目标文件中包括2个文件。
[0246] 如果目标对象的拖拽位置在Android应用程序源窗口中移动,则显示禁止拖拽符号;如果拖拽在源窗口中释放,则结束本次拖拽事件。如果拖拽在Windows应用程序的窗口中释放,则执行图8C所示的后续步骤。如果拖拽在Android应用程序非源窗口中释放,则可以执行图11C所示的步骤1104及其后续流程。
[0247] 804、在Host侧检测到拖拽的目标对象被释放后,若拖拽释放窗口为Windows应用程序的窗口,则Host侧基于Qemu Pipe将拖拽信息4通知给Guest侧,该拖拽信息4包括传输类型。
[0248] 比如,Host侧检测到释放对应的鼠标事件,该鼠标事件用于表示拖拽的目标对象被释放。示例性的,参见图9中的(a),用户通过鼠标将目标文件拖入Windows资源管理器的窗口903后,通过鼠标释放拖拽的目标文件,此时Host侧检测到释放对应的鼠标事件。
[0249] Host侧可以通过WindowFromPoint()函数获取拖拽释放位置对应的窗口标识(比如句柄),然后遍历维护的对应关系,若该对应关系中存在拖拽源窗口的窗口标识对应的窗口标识,则可以判断拖拽释放窗口为Android应用程序窗口;否则拖拽释放窗口为Windosws应用程序窗口。此处,拖拽释放窗口为Windows应用程序的窗口。
[0250] 若拖拽释放窗口为Windows应用程序的窗口,则Host侧还可以通过该Windows应用程序进行权限、容量等检查,以确定是否能够正常拖入目标对象。
[0251] 由于拖拽源窗口为Android应用程序的窗口,拖拽释放窗口为Windows应用程序的窗口,因而该传输类型为Android应用程序与Windows应用程序之间的传输。Host侧将拖拽信息4通知给Guest侧,该拖拽信息4包括传输类型,以便Guest侧根据该传输类型进行相应的传输处理。此外,拖拽信息4还可以包括拖拽相关的其他信息,不予限定。
[0252] 此外,若拖拽释放窗口为Windows应用程序的窗口,则Host侧还可以进行拖拽权限或容量等检查。比如,有些文件需要管理员权限才可以拖拽。
[0253] 如果目标对象为目标文件,则执行步骤805;如果目标对象为目标文本,则执行步骤811。
[0254] 805、若目标对象为目标文件,则Host侧基于Qemu Pipe通知Guest侧传输目标文件。
[0255] 806、Guest侧将目标文件拷贝至9p共享文件夹,基于Qemu Pipe将目标文件的文件名信息通知给Host侧,并在目标文件拷贝完成后通知Host侧。而后,执行步骤807或步骤810。
[0256] 其中,Guest侧可以每拷贝完目标文件中的一个文件至9p共享文件夹后,就通知Host侧单个文件拷贝完成;Guest侧可以将单个文件的文件名信息,以及文件索引和文件大小等信息通知给Host侧。或者,Guest侧可以在整个目标文件都拷贝至9p共享文件夹后,再通知Host侧拷贝完成,不予限定。Guest侧可以将拷贝至9p共享文件夹中的文件的路径,通知给Host侧。
[0257] 807、若目的端Windows应用程序为Windows资源管理器,且目标对象为目标文件,则Host侧取消构建的Windows侧拖拽事件。
[0258] 808、Host侧根据目标文件的文件名信息,将9p共享文件夹中的目标文件剪切至拖拽释放位置对应的Windows资源管理器路径下。
[0259] 其中,Host侧可以在每个文件拷贝完成后,将单个文件依次剪切指目的路径;也可以在目标文件拷贝完成后,将目标文件剪切至目的路径。
[0260] 例如,拖拽释放位置对应的Windows资源管理器路径可以为桌面、收藏夹或D:\资料等。Host侧可以根据释放位置的全局坐标,确定拖拽释放窗口为Windows资源管理器,并确定具体的拖拽释放路径。其中,全局坐标是相对于整个屏幕的坐标,释放位置的全局坐标是指通过鼠标进行拖拽释放时,释放位置相对于屏幕的坐标。
[0261] 比如,Windows侧的窗口标识为句柄。参见图10,Host侧可以根据获取的释放位置的全局坐标,获取释放位置所在的Windows窗口的句柄。然后,Host侧获取释放位置所在的Windows窗口的父窗口句柄与类名,获取已打开的Windows资源管理器信息。而后,Host侧判断父窗口类名是否为SHELLDLL_DefView。若不是SHELLDLL_DefView,则拖拽释放窗口不是Windows资源管理器;若是SHELLDLL_DefView,则继续判断父窗口的父窗口类名是否为Worker或是Progman。如果是Worker或是Progman,则说明拖拽释放路径为Windows资源管理器中的桌面,则通过SHGetSpecialFolderPath函数获取桌面路径。如果不是Worker或是Progman,则枚举拖拽窗口父窗口句柄与所有打开的Windows资源管理器比较,确定拖拽释放位置对应的Windows资源管理器路径。
[0262] 其中,若Guest侧在步骤807中每拷贝完目标文件中的一个文件至9p共享文件夹后,就通知Host侧拷贝完成,则Host侧可以在步骤808中及时将拷贝完成的该文件剪切至拖拽释放位置对应的Windows资源管理器路径下,而不用等到目标文件中的各文件都拷贝完成后再剪切,可以提高文件传输的速率。
[0263] 在一些实施例中,如果目的端Windows应用程序为Windows资源管理器,则也可以通过构建Windows侧拖拽事件来传输目标文件。其中,相较于Windows拖拽事件,通过调用剪切文件的接口实现9p共享文件夹到Windows资源管理器的文件传输速度更快。
[0264] 在步骤804之后,若目的端为Windows资源管理器以外的其他Windows应用程序,则该方法还包括:
[0265] 809、若目的端为Windows资源管理器以外的其他Windows应用程序,则Guest侧基于Qemu Pipe将目标文件的文件名信息通知给Host侧,并在目标文件拷贝完成后通知Host侧所有拖拽文件拷贝完成。
[0266] 810、Host侧根据目标文件的文件名信息,从将9p共享文件夹中读取目标文件,根据目标文件构建Windows侧拖拽事件(如OLE Drag/Drop拖拽事件),实现目标文件到Windows应用程序的传输,并结束该Windows侧拖拽事件。
[0267] 在一些实施例中,与步骤608中类似,在步骤806和步骤809中,Guest侧可以基于Qemu Pipe将目标文件的文件名信息和时间戳信息通知给Host侧。
[0268] 在一些实施例中,在目标文件的传输过程中,Host侧还可以显示传输进度条。
[0269] 如果目标对象为目标文本,则在步骤800中Guest侧触发拖拽事件之后,该方法还包括以下步骤:
[0270] 811、Guest侧触发拖拽事件后,将目标文本通知给Host侧。
[0271] 812、Host侧根据目标文本构建Windows侧拖拽事件。而后,执行步骤813或步骤814。
[0272] 在步骤804之后,该方法还可以包括:
[0273] 813、若目的端为Windows资源管理器,则Host侧结束Windows侧拖拽事件,将目标文本剪切至拖拽释放位置对应的Windows资源管理器路径下,并通知Guest侧结束拖拽。
[0274] 814、若目的端为Windows资源管理器以外的其他Windows应用程序,则Host侧通过构建Windows侧拖拽事件,实现目标文本到Windows应用程序的传输,而后结束Windows侧拖拽事件。
[0275] 参见图8C,在步骤808、步骤810或步骤814之后,该方法还可以包括:
[0276] 815、Host侧Windows应用程序根据目标对象和释放位置进行相应处理。
[0277] 关于该步骤的说明可以参见上述步骤612中的相关描述。
[0278] 示例性的,基于图9中的(a)所示的用户将目标文件从Android文件管理窗口到Windows资源管理器窗口的拖拽操作,参见图9中的(b),Windows资源管理器窗口中添加了目标文件,即添加了图标b,实现了目标文件从Android文件管理到Windows资源管理器的复制。
[0279] 需要说明的是,在场景(2)中,以上多个实施例中的部分或全部步骤(例如图8C所示流程中的部分步骤),在不冲突的情况下,可以重新组合,从而构成新的实施例。本申请实施例对此不再具体说明。
[0280] 可见,针对上述场景(2),本申请实施例通过Qemu Pipe通信可以实现Android模拟器Host侧与Guest侧之间进行通信交互,基于Windows侧窗口标识(比如句柄)与Android侧窗口标识(比如VirtualDisplay窗口的DisplayId)的一一对应关系,可以根据拖拽源位置所在的Windows侧窗口确定源端Android应用程序,并且通过Virtio‑9p可以实现Android侧与Windows侧的文件共享,通过Qemu Pipe可以实现Android侧与Windows侧的文本共享,进而实现Windows应用程序与Android应用程序之间拖拽传输文件或文本。
[0281] 在图8A‑图10描述的方案中,基于用户将目标对象从源端Android应用程序的窗口,拖拽至目的端Windows应用程序的窗口的简单的一步拖拽操作,即可实现Android应用程序到Windows应用程序的目标对象的传输,而不用像现有技术那样需要用户进行多步、复杂的操作。并且,用户通过鼠标等输入设备在窗口间的拖拽操作,更符合用户基于Windows操作系统和电脑的操作使用习惯,因而用户使用体验较好,能够增加产品的竞争力。而且,该方案不需要像现有技术那样依赖adb、socket通信和网络能力等因素,不会受到这些因素的限制,因而文件传输速度快且安全可靠。
[0282] 场景(3)、一步拖拽实现Android应用程序间的文件传输:
[0283] 在该交互场景中,用户可以通过鼠标或触摸屏等输入设备,将Windows操作系统上运行的一个Android应用程序窗口中的目标对象,拖拽至另一个Android应用程序的窗口中。电脑响应于用户的拖拽操作,将Windows操作系统上一个Android应用程序中的目标对象传输到另一个Android应用程序中,实现Windows操作系统上不同Android应用程序间的目标对象的复制。
[0284] 在该交互场景中,参见图11A,Host侧检测Android应用程序窗口是否发生拖拽文件操作。若Android应用程序窗口发生拖拽文件操作,则检测拖拽释放位置是否处于其他Android应用程序窗口。若拖拽释放位置处于其他Android应用程序窗口,则基于管道通信通知Guest侧拖拽释放的安卓侧窗口标识以及拖拽文件的文件名信息等,Guest侧通过拖拽的目标对象URI构建传输的数据,模拟源Android应用程序向目的Android应用程序的拖拽传输目标对象。
[0285] 在另一些实施例中,在该交互场景下,参见图11B,本申请提供的传输目标对象的方法可以包括以下流程:拖拽源Android应用程序触发拖拽,Guest侧(即Android系统)基于管道通信Qemu Pipe向Host侧通知拖拽事件,包括通知拖拽位置对应的安卓侧窗口标识,目标对象类型,当目标对象为目标文件时的文件名信息(比如文件名拼接)、文件总大小和文件数量,以及目标对象为目标文本时的文本长度和文本内容等信息。Host侧构建Windows侧拖拽事件(如OLE Drag/Drop拖拽事件)。若拖拽在安卓应用程序的窗口内移动,则循环执行以下步骤直至目标对象移出安卓应用程序的窗口或者目标对象被拖拽释放:安卓模拟器的Host侧基于管道通信Qemu Pipe将拖入事件通知给Guest侧,包括通知拖拽位置坐标、拖拽位置进入的安卓侧窗口标识和目标对象类型等信息;Guest侧基于Qemu Pipe向Host侧回复是否允许拖入;Host侧根据Guest侧是否允许拖入的回复显示拖拽样式,比如禁止/允许拖拽标识。
[0286] 而后,继续参见图11B,若拖拽释放的目的窗口为安卓应用程序窗口,则Host侧取消Windows侧的拖拽事件,通知Guest侧传输类型为Android应用程序间的传输,并将拖拽源/目的窗口对应的安卓侧窗口标识,拖拽释放位置坐标和目标对象类型等信息通知给Guest侧。具体的,Host侧可以获取拖拽释放全局坐标,并判断拖拽释放坐标是否位于Android应用程序窗口,以及通过窗口句柄获取拖拽释放Android应用程序虚拟显示(VirtualDisplay)窗口的DisplayId。然后,Host侧将转换后的Android应用程序内部坐标、Android应用程序Display窗口的DisplayId,目标对象类型以及传输类型通过Qemu Pipe通信传递给Guest侧。Guest侧构建空的拖拽开始事件。Guest侧根据目标文件的URI/文本内容构建拖拽事件,以将目标对象传输至指定的拖拽释放目的安卓应用窗口。Guest侧构建空的拖拽结束事件,以结束本次针对目标对象的拖拽传输。
[0287] 在其他一些实施例中,结合图11C所示的流程图及图12所示的界面示意图,对本申请提供的传输目标对象的方法进行详细说明:
[0288] 1100、Guest侧检测到Android应用程序1窗口中的目标对象被触发拖拽,拖拽源Android应用触发拖拽事件。
[0289] 比如,Guest侧检测到触发拖拽对应的鼠标事件,该鼠标事件用于表示从Android应用程序1的窗口中开始拖拽目标对象。示例性的,如图12中的(a)所示,用户通过触摸屏选中Android应用程序1(如Android文件管理)的窗口1201中的目标对象,并通过手指触摸拖拽该目标对象,此时Guest侧检测到触发拖拽对应的鼠标事件。
[0290] 1101、Guest侧将拖拽信息5通知给Host侧,该拖拽信息5包括拖拽源窗口对应的Android侧窗口标识和目标对象类型。
[0291] 拖拽源Android应用触发拖拽事件后,Guest侧可以将该拖拽事件通知给Host侧。Guest侧可以将拖拽信息5通知给Host侧。例如,该拖拽信息5可以包括拖拽源窗口对应的Android侧窗口标识和目标对象类型,以便Host侧获知拖拽源端和待传输的目标对象的具体类型。其中,该目标对象类型可以为文件或文本等。此外,该拖拽信息5还可以包括拖拽相关的其他信息,比如目标对象为目标文件时还包括目标文件的文件名信息(如文件名拼接信息)和文件总大小等,目标对象为目标文本时还包括文本内容等信息,本申请实施例对拖拽信息5的具体内容不予限定。
[0292] 若目标对象为目标文本,则执行步骤1104;如果目标对象为目标文件,则在步骤1104之前还执行步骤1102‑1103。
[0293] 1102、若目标对象为目标文件,则Guest侧将目标对象的文件名信息和拖拽图标通知给Host侧。
[0294] 其中,若拖拽信息5中包括文件名信息,则步骤1102中也可以不包括文件名信息。
[0295] 1103、Host侧根据文件名信息构建Windows侧的拖拽事件,并设置拖拽图标。
[0296] 关于步骤1102‑1103的描述可以参见上述步骤802‑803中的说明,不予赘述。其中,Host侧设置拖拽图标为可选操作。
[0297] 如果目标对象的拖拽位置在Android应用程序源窗口中移动,则显示禁止拖拽符号。如果拖拽在源窗口中释放,则结束本次拖拽事件。如果拖拽在Windows应用程序的窗口中释放,则执行图8C所示的步骤804及其后续步骤。如果目标对象的拖拽位置在Android应用程序非源窗口中移动,则Host侧向Guest侧通知通入事件,包括拖拽位置坐标、拖拽位置所在Android侧窗口标识和目标类型等信息。Guest侧向Host侧回复当前拖拽进入的窗口和拖拽位置是否允许拖入。Host侧根据该回复显示允许/禁止拖拽标识。如果拖拽在Android应用程序非源窗口中释放,则执行图11C所示的后续步骤。
[0298] 1104、在Host侧检测到拖拽的目标对象被释放后,若Host侧根据释放位置坐标确定拖拽释放窗口为Android应用程序2的窗口,则取消Windows侧拖拽事件,并基于Qemu Pipe将拖拽信息6通知给Guest侧,该拖拽信息6包括拖拽源窗口对应的Android侧窗口标识、拖拽释放窗口对应的Android侧窗口标识、释放位置坐标、目标对象类型和传输类型。
[0299] 比如,Host侧检测到释放对应的鼠标事件,该鼠标事件用于表示拖拽的目标对象被释放。示例性的,参见图12中的(a),用户通过鼠标在Android应用程序2(如Android社交应用)的窗口1202内释放拖拽的目标文件,此时Host侧检测到释放对应的鼠标事件。
[0300] 其中,Host侧根据释放位置的坐标确定拖拽释放窗口为Android应用程序2的窗口,并根据拖拽源窗口和拖拽释放窗口确定传输类型为Android应用程序之间的传输。Host侧将传输类型通知给Guest侧,以便Guest侧根据传输类型进行相应的传输处理。
[0301] Host侧将拖拽释放窗口对应的Android侧窗口标识、释放位置坐标、目标对象类型通知给Guest侧,以便Guest侧确定拖拽释放窗口对应的Android侧窗口及释放位置是否允许拖入目标文件。
[0302] 此外,如果目标对象为目标文件,则拖拽信息6还可以包括目标文件的总大小和目标文件包括的文件数量等信息。如果目标对象为目标文本,则拖拽信息6还可以包括目标文本的长度等信息。或者,Guest侧也可以在触发拖拽事件后,将这些信息通知给Host侧。
[0303] 1105、Guest侧判断拖拽释放窗口及释放位置是否允许拖入目标对象,并基于Qemu Pipe将判断结果通知给Host侧。
[0304] 若目标对象为目标文件,则执行步骤1106‑1107;若目标对象为目标文本,则执行步骤1108‑1111。
[0305] 1106、若Host侧根据来自Guest侧的判断结果确定允许拖入,则基于Qemu Pipe将目标文件的文件名信息通知给Guest侧。
[0306] 可选地,Host侧还可以根据来自Guest侧的判断结果,显示允许/禁止拖拽标识。
[0307] 可选地,在步骤1106中,与上述步骤608中类似,Host侧还可以将时间戳信息通知给Guest侧。
[0308] 1107、Guest侧首先构建空的拖拽开始事件,而后根据文件名信息获取目标文件,并根据目标文件构建Android侧拖拽事件,实现目标文件到Android应用程序2的传输,并构建空的拖拽结束事件。
[0309] 其中,Guest侧根据文件名信息获取目标文件后,可以将目标文件文件添加至媒体库,获取目标文件对应的URI。而后,Guest侧可以通过URI去媒体库中快速读取该目标文件,根据目标文件构建Android侧拖拽事件。
[0310] 或者,Guest侧与Host侧之间也可以不传递文件名信息,而传递目标文件的URI,从而根据URI获取目标文件,并根据目标文件构建Android侧拖拽事件。
[0311] 在一些实施例中,在目标文件的传输过程中,电脑还可以显示传输进度条。
[0312] 在上述实施例中,Guest侧和Host侧通过传递目标文件的文件名信息来通知拖拽的目标文件。在其他一些实施例中,Guest侧和Host侧之间也可以不用传递目标文件的文件名信息,在Android应用程序1触发拖拽后,Guest侧可以保存拖拽的目标文件的标识信息;在拖拽释放到Android应用程序2的窗口后,Guest侧可以根据保存的目标文件的标识信息,获取目标文件,从而根据目标文件构建Android侧拖拽事件。也就是说,在该场景中,Host侧可以通知Guest侧拖拽释放窗口为Android应用程序窗口。至于目标文件的文件名或路径信息,可以Guset侧触发拖拽的时候存储,也可以由Host侧中转,将Guest侧通知的文件名等拖拽信息在释放时再次传给Android应用程序。
[0313] 如果目标对象为目标文本,则在Guest侧触发拖拽事件后,该方法还可以包括:
[0314] 1108、Guest侧触发拖拽事件后,若目标对象为目标文本,则将目标文本通知给Host侧。
[0315] 1109、Host侧根据目标文本构建Windows侧拖拽事件。
[0316] 1110、在Host侧检测到拖拽的目标对象被释放后,目标对象为目标文本,Host侧将目标文本通知给Guest侧。
[0317] 在步骤1104之后,该方法还可以包括:
[0318] 1111、若Guest侧判断拖拽释放窗口及释放位置允许拖入目标对象,目标对象为目标文本,则首先构建空的拖拽开始事件,而后根据目标文本构建Android侧拖拽事件,实现目标文本到Android应用程序2的传输,并构建空的拖拽结束事件。
[0319] 在上述实施例中,Guest侧和Host侧通过传递目标文本的文件内容来通知拖拽的目标文件。在其他一些实施例中,Guest侧和Host侧之间也可以不用传递目标文本的文本内容,在Android应用程序1触发拖拽后,Guest侧可以保存拖拽的目标文本;在拖拽释放到Android应用程序2的窗口后,Guest侧可以根据保存的目标文本构建Android侧拖拽事件。
[0320] 参见图11C,在步骤1107或步骤1111之后,该方法还可以包括:
[0321] 1112、Guest侧Android应用程序2根据目标对象和释放位置进行处理。
[0322] 关于该步骤的说明可以参见上述步骤612中的相关描述,不予赘述。
[0323] 示例性的,目标对象为目标文件,基于图12中的(a)所示的用户将目标文件(即图片b)从Android应用程序1(如Android文件管理)的窗口1201到Android应用程序2(如Android社交应用)的窗口1202中信息编辑窗口的拖拽操作,参见图12中的(b),Android应用程序2的窗口中添加了目标文件,且目标文件发送给了聊天界面对应的联系人,实现了目标文件从Android应用程序1到Android应用程序2的复制。
[0324] 需要说明的是,不限于图12举例所采用的应用程序,当Android应用程序为其他应用程序时,仍可以采用以上实施例提供的方法,实现Android应用程序间传输目标对象,此处不再一一举例。
[0325] 还需要说明的是,在场景(3)中,以上多个实施例中的部分或全部步骤(例如图11C所示流程中的部分步骤),在不冲突的情况下,可以重新组合,从而构成新的实施例。本申请实施例对此不再具体说明。
[0326] 可见,针对上述场景(3),本申请实施例通过Qemu Pipe通信可以实现Android模拟器Host侧与Guest侧之间进行通信交互,通过确定拖拽源窗口与目的窗口均为Android应用程序窗口,模拟在Android操作系统内部进行拖拽传输,实现Windows操作系统上不同Android应用程序之间拖拽传输目标对象。
[0327] 在图11A‑图12描述的方案中,基于用户将目标对象从源端Android应用程序的窗口,拖拽至目的端Android应用程序的窗口的简单的一步拖拽操作,即可实现Windows操作系统上不同Android应用程序之间的目标对象的传输,而不需要用户进行多步、复杂的操作。并且,用户通过鼠标等输入设备在窗口间的拖拽操作,更符合用户基于Windows操作系统和电脑的操作使用习惯,因而用户使用体验较好,能够增加产品的竞争力。而且,该方案不需要通过共享文件夹或Windows侧来中转目标文件,因而传输速度快。此外,该方案不需要依赖adb、socket通信和网络能力等因素,不会受到这些因素的限制,文件传输速度快且安全可靠。
[0328] 需要说明的是,场景(1)‑(3)描述的方案为基于用户的一步拖拽操作来复制目标对象。在其他一些实施例中,电脑可以基于用户的一步拖拽操作来剪切目标对象(例如目标文件或目标文本等),即将目标对象从源端应用程序传输到目的端应用程序,并删除源端应用程序中的该目标文件。比如,基于用户针对目标对象从Windows应用程序到Android应用程序的一步拖拽操作,可以将Windows应用程序中的目标对象剪切至Android应用程序;基于用户针对目标对象从Android应用程序到Windows应用程序的一步拖拽操作,可以将Android应用程序中的目标对象剪切至Windows应用程序;基于用户针对目标对象从Android应用程序1到Android应用程序2的一步拖拽操作,可以将Android应用程序1中的目标对象剪切至Android应用程序2。
[0329] 在本申请的一些实施例中,在上述场景(1)‑(3)中,可传输的目标对象也可以为文件夹,且文件夹的传输方式与文件的传输方式相同。也可以理解为,目标对象类型中的文件包括文件夹。
[0330] 在本申请的另一些实施例中,在上述场景(1)‑(3)中,可传输的目标对象不能为文件夹,若拖拽的目标对象为文件夹,则Host侧直接通知源窗口不允许拖拽,拖拽文件夹在Android应用程序窗口释放时,Host侧可以提示用户(例如通过弹窗等方式来提示用户)不允许拖拽文件夹;从Android侧窗口中拖拽文件夹时,Guest侧也不会将拖拽信息通知给Host侧。
[0331] 场景(4)、复制和粘贴操作实现Windows应用程序到Android应用程序的文件传输:
[0332] 在该交互场景中,用户可以通过鼠标、触摸屏或键盘快捷键,基于Windows应用程序窗口中的目标对象执行复制操作(例如点击鼠标右键后选择复制选项,或者按下键盘上的Ctrl+C快捷键等),并在Android应用程序的窗口中执行粘贴操作(例如点击粘贴选项,按下键盘上的Ctrl+V快捷键,或者点击鼠标右键后选择粘贴选项等)。电脑根据用户的复制和粘贴操作,将Windows应用程序中的目标文件复制到Android应用程序,实现Windows应用程序到Android应用程序的文件传输。
[0333] 针对该场景(4),参见图13A,本申请实施例提供了一种文件传输方法,包括:首先,Android模拟器Host侧执行复制文件操作,将复制文件路径放共享剪贴板。通过Windows IsClipboardFormatAvailable(),可以区分共享剪贴板中的数据类型是文本、文件或其他。其次,当Android模拟器Guest侧(即Android系统)应用程序中进行粘贴文件操作时,对粘贴目的路径,粘贴文件等进行文件权限、容量等权限检查。检查通过之后,Guest侧通过Host侧发起文件复制操作。Host侧收到文件复制操作请求后,检查源文件是否存在。检查通过之后,显示复制进度条;同时开始将源文件复制到共享文件夹中(在模拟器启动时mount的目录);复制完成之后,Host侧通知Guest侧复制完成。Guest侧收到文件复制完成消息后,再将文件从共享文件夹复制到Android目的目录中,然后将共享文件夹中的文件删除;最后通知Host侧文件复制成功(若未复制成功则回复复制失败)。在Host侧收到文件复制成功消息后,复制进度条显示完成。
[0334] 在其他一些实施例中,结合图13B所示的流程图及图14‑图16所示的界面示意图,对本申请提供的跨系统传输目标对象的方法进行详细说明:
[0335] 1300、Host侧检测到Windows应用程序的窗口中针对目标对象的复制操作。
[0336] 示例性的,参见图14中的(a),目标对象为Windows资源管理器的窗口1401中的文档1和文档2,用户针对目标文件按下键盘上的Ctrl+C快捷键,以指示复制该目标对象,此时Host侧检测到针对目标对象的复制操作。
[0337] 若目标对象为目标文件,则执行步骤1301‑1311;若目标对象为目标文本,则执行步骤1312‑1317。
[0338] 1301、若目标对象为目标文件,则Host侧响应于用户的复制操作,将目标文件的路径信息存放到Host侧剪贴板中。
[0339] 1302、Host侧监控Host侧剪贴板的变化,将Host侧剪贴板中目标文件的路径信息存放到共享剪贴板中。
[0340] 其中,Host侧可以基于Qemu Pipe,将Host侧剪贴板中目标文件的路径信息存放到共享剪贴板中。
[0341] 1303、Guest侧检测到Android应用程序的窗口中的粘贴操作,该粘贴操作用于指示在该窗口中粘贴目标文件。
[0342] 示例性的,参见图14中的(b),用户在Android文件管理的窗口1402中按下键盘上的快捷键Ctrl+V执行粘贴操作(或者,用户也可以点击粘贴选项1403的粘贴操作),此时Guest侧检测到该粘贴操作。
[0343] 电脑检测到用户执行的粘贴操作后,通过以下步骤将共享剪贴板中的路径信息对应的目标文件,粘贴至目的端Android文件管理窗口。
[0344] 1304、Guest侧对Android应用程序对应的待粘贴目的路径,以及共享剪贴板中的路径信息对应的目标文件进行预检查,并在预检查通过后,基于Qemu Pipe向Host侧发起目标文件复制请求。
[0345] 例如,该预检查包括检查待粘贴目的路径是否存在、是否合法,对目标文件进行权限和容量检查等。其中,该预检查操作可以为可选操作。
[0346] 1305、Host侧接收到复制请求后,确定源目标文件是否存在。
[0347] 1306、若Host侧确定源目标文件存在,则将共享剪贴板中的路径信息对应的目标文件拷贝到9p共享文件夹,在拷贝完成后基于Qemu Pipe通知Guest侧。
[0348] 其中,当目标文件包括多个文件时,Host侧可以每拷贝完目标文件中的一个文件后,就通知Guest侧;也可以在目标文件的全部文件都拷贝完后再通知Guest侧。
[0349] 1307、Guest侧接收到拷贝完成通知后,将目标文件从9p共享文件夹复制到Android应用程序。
[0350] 1308、Guest侧的Android应用程序根据粘贴位置进行相应处理。
[0351] 关于该步骤的说明可以参见上述步骤612中的相关描述。示例性的,基于图14中的(a)‑(b)所示的复制和粘贴操作,参见图14中的(c),Android文件管理窗口中添加了目标文件,实现了目标文件从Windows资源管理器到Android文件管理的复制。
[0352] 1309、Guest侧将共享文件夹中的目标文件删除,并基于Qemu Pipe通知Host侧传输完成。
[0353] 后续,响应于用户在其他Android应用程序的窗口中的粘贴操作,可以重新执行步骤1303‑1309,从而将目标文件复制到其他Android应用程序的窗口中,实现多次粘贴。
[0354] 在上述过程中,用户执行的是复制和粘贴操作,在其他一些实施例中,如果用户通过鼠标或键盘的快捷键等方式,基于Windows应用程序窗口中的目标文件执行剪切操作,则在上述步骤1309之后,该方法还包括:
[0355] 1310、Host侧接收到传输完成通知后,删除Windows应用程序中的目标文件,删除Host剪贴板中目标文件的路径信息。
[0356] 1311、Host侧同步Host剪贴板的变化,删除共享剪贴板中存放的目标文件的路径信息。
[0357] 示例性的,目标对象为目标文件,针对图15中的(a)‑(b)所示的用户基于Windows资源管理器窗口1501中的目标文件,按下快捷键Ctrl+X的剪切操作,以及用户基于Android文件管理窗口1502按下快捷键Ctrl+V的粘贴操作(或者用户点击粘贴选项1503的粘贴操作),参见图15中的(c),Android文件管理窗口中添加了目标文件,Windows资源管理器中删除了目标文件,实现了从Windows资源管理器剪切目标文件并粘贴到Android文件管理的过程。
[0358] 在一些实施例中,Host侧还可以在目标文件的复制/剪切过程中显示传输进度条。例如,该传输进度条为复制进度条,Host侧在确定源文件存在后,可以显示复制进度条;在接收到来自Guest侧的文件复制完成通知后,复制进度条显示完成。
[0359] 在步骤1300之后,若目标对象为目标文本,则执行以下步骤:
[0360] 1312、若目标对象为目标文本,则Host侧响应于用户的复制操作,将目标文本存放到Host剪贴板中。
[0361] 1313、Host侧监控Host侧剪贴板的变化,将Host侧剪贴板中目标文本存放到共享剪贴板中。
[0362] 1314、Guest侧检测到Android应用程序的窗口中的粘贴操作,该粘贴操作用于指示在该窗口中粘贴目标文本。
[0363] 1315、Guest侧对Android应用程序对应的待粘贴目的路径,以及共享剪贴板中目标文本进行预检查。
[0364] 其中,该步骤1315为可选的步骤。
[0365] 1316、Guest侧在预检查通过后,将共享剪贴板中的目标文本复制到Android应用程序。
[0366] 1317、Guest侧的Android应用程序根据粘贴位置进行相应处理。
[0367] 例如,Android应用程序根据具体的粘贴位置,将目标文本插入到粘贴位置,或者将目标文本发送给联系人。
[0368] 示例性的,目标对象为目标文本,针对图16中的(a)‑(b)所示的用户基于Windows应用程序(如Windows应用程序1)窗口1601中的目标文本按下快捷键Ctrl+C的复制操作,以及用户基于Android应用程序(如Android社交应用)窗口1602按下快捷键Ctrl+C的粘贴操作,参见图16中的(c),Android应用程序中添加了目标文本,且目标文本发送给了对应的联系人,实现了目标文本从Android文件管理到Android社交应用的复制。
[0369] 如果用户执行的是剪切和粘贴操作,则在上述步骤1317之后,该方法还包括:
[0370] 1318、Host侧删除Windows应用程序中的目标文本。
[0371] 本申请实施例通过Qemu Pipe通信实现Android模拟器Host侧与Guest侧进行通信交互,通过如图4所示的共享剪贴板复制文件路径,通过Virtio‑9p实现Host侧与Guest侧的文件共享,或者通过共享剪贴板实现Host侧与Guest侧的文本共享,从而实现在Windows应用程序与Android应用程序之间复制/剪切文件或文本。
[0372] 该方案在9P共享文件系统的基础上,实现了Windows与Android模拟器侧共享剪贴板的相关操作。在用户体验上实现了Windows侧与Android侧剪贴板的功能,与Windows与Android剪贴板的使用方式保持一致,符合用户的操作使用习惯。
[0373] 在图13A‑图16描述的方案中,基于用户在源端Windows应用程序的窗口针对目标对象的简单的复制/剪切操作,和在目的端Android应用程序的窗口的简单的粘贴操作,即可实现Windows应用程序到Android应用程序的目标对象的复制/剪切,而不需要用户进行多步、复杂的操作。并且,用户通过鼠标或键盘等输入设备在窗口内的复制/剪切和粘贴操作,更符合用户基于Windows操作系统和电脑的操作使用习惯,因而用户使用体验较好,能够增加产品的竞争力。而且,该方案不需要依赖adb、socket通信和网络能力等因素,文件传输速度快且安全可靠。
[0374] 需要说明的是,在场景(4)中,以上多个实施例中的部分或全部步骤(例如图13B所示流程中的部分步骤),在不冲突的情况下,可以重新组合,从而构成新的实施例。本申请实施例对此不再具体说明。
[0375] 场景(5)、复制和粘贴操作实现Android应用程序到Windows应用程序的文件传输:
[0376] 在该交互场景中,用户可以通过鼠标、触摸屏或键盘的快捷键,基于Android应用程序窗口中的目标文件执行复制操作(例如选中目标对象后点击对应的复制选项,或者在目标对象后长按鼠标左键后点击出现的复制选项,或者按下键盘上的Ctrl+C快捷键,或者针对目标文件点击鼠标右键后选择复制选项等),并在Windows应用程序的窗口中执行粘贴操作(例如点击鼠标右键后选择粘贴选项,或者按下键盘上的Ctrl+V快捷键等)。电脑根据用户的复制和粘贴操作,将Android应用程序中的目标文件复制到Windows应用程序,实现Android应用程序到Windows应用程序的文件传输。
[0377] 以下结合图17所示的流程图及图18所示的界面示意图进行说明:
[0378] 1700、Guest侧检测到Android应用程序的窗口中针对目标对象的复制操作。
[0379] 若目标对象为目标文件,则执行步骤1701‑1711;若目标对象为目标文本,则执行步骤1712‑1717。
[0380] 1701、若目标对象为目标文件,则Guest侧响应于用户的复制操作,将目标文件的路径信息存放到Guest侧剪贴板中。
[0381] 1702、Guest侧监控Guest侧剪贴板的变化,将Guest侧剪贴板中目标文件的路径信息存放到共享剪贴板中。
[0382] 其中,Guest侧可以基于Qemu Pipe,将Guest侧剪贴板中目标文件的路径信息存放到共享剪贴板中。
[0383] 1703、Host侧检测到Windows应用程序窗口中的粘贴操作,该粘贴操作用于指示在该窗口中粘贴目标文件。
[0384] 1704、Host侧对Windows应用程序窗口对应的待粘贴目的路径,以及共享剪贴板中的路径信息对应的目标文件进行预检查,并在预检查通过后,基于Qemu Pipe向Guest侧发起目标文件复制请求。
[0385] 其中,该预检查操作可以为可选操作。
[0386] 1705、Guest侧接收到复制请求后,确定源目标文件是否存在。
[0387] 1706、若Guest侧确定源目标文件存在,则将源目标文件拷贝到9p共享文件夹,并在拷贝完成后,基于Qemu Pipe通知Host侧。
[0388] 其中,当目标文件包括多个文件时,Guest侧可以每拷贝完目标文件中的一个文件后,就通知Host侧;也可以在目标文件的全部文件都拷贝完后再通知Host侧。
[0389] 1707、Host侧将目标文件从共享文件夹复制到Windows应用程序。
[0390] 1708、Host侧的Windows应用程序根据粘贴位置进行相应处理。
[0391] 该步骤的相关说明可以参见步骤612中的相关描述。例如,Windows应用程序根据具体的粘贴位置,将目标文件复制到粘贴位置对应的目录下,或者将目标文件发送给联系人等。
[0392] 示例性的,针对图18中的(a)‑(b)所示的用户基于Android文件管理窗口1801中的目标文件按下快捷键Ctrl+C的复制操作(或者,用户点击复制选项1803的复制操作),以及用户基于Windows资源管理器窗口1802按下快捷键Ctrl+V的粘贴操作,参见图18中的(c),Windows资源管理器窗口中添加了目标文件,实现了目标文件从Android文件管理到Windows资源管理器的复制。
[0393] 1709、Host侧将共享文件夹中的目标文件删除,并基于Qemu Pipe通知Guest侧文件传输完成。
[0394] 在上述过程中,用户执行的是复制和粘贴操作,在其他一些实施例中,如果用户通过鼠标或键盘的快捷键等方式,基于Android文件管理窗口中的目标文件进行剪切操作,则在上述步骤1709之后,该方法还包括:
[0395] 1710、Guest侧接收到传输完成通知后,删除Android应用程序中的目标文件,删除Guest侧剪贴板中目标文件的路径信息。
[0396] 1711、Guest侧同步Guest侧剪贴板的变化,删除共享剪贴板中存放的目标文件的路径信息。
[0397] 在一些实施例中,电脑在目标文件的复制/剪切过程中还可以显示传输进度条。
[0398] 在步骤1701之后,若目标对象为目标文本,则执行以下步骤:
[0399] 1712、若目标对象为目标文本,则Guest侧响应于用户的复制操作,将目标文本存放到Guest侧剪贴板中。
[0400] 1713、Guest侧监控Guest侧剪贴板的变化,将Guest侧剪贴板中目标文本存放到共享剪贴板中。
[0401] 1714、Host侧检测到Windows应用程序窗口中的粘贴操作,该粘贴操作用于指示在该窗口中粘贴目标文本。
[0402] 1715、Host侧对Windows应用程序对应的待粘贴目的路径,以及共享剪贴板中目标文本进行预检查。
[0403] 其中,该步骤1715为可选的步骤。
[0404] 1716、Host侧在预检查通过后,将目标文本复制到Windows应用程序。
[0405] 1717、Host侧的Windows应用程序根据粘贴位置进行相应处理。
[0406] 该步骤的相关说明可以参见步骤612中的相关描述。例如,Windows应用程序根据具体的粘贴位置,将目标文本插入到粘贴位置,或者将目标文本发送给联系人。
[0407] 如果用户执行的是剪切和粘贴操作,则在上述步骤1717之后,该方法还包括:
[0408] 1718、Guest侧删除Android应用程序中的目标文本。
[0409] 本申请实施例通过Qemu Pipe通信实现Android模拟器Host侧与Guest侧进行通信交互,通过如图4所示的共享剪贴板复制文件路径,通过Virtio‑9p实现Host侧与Guest侧的文件共享,或者通过共享剪贴板实现Host侧与Guest侧的文本共享,在Android应用程序与Windows应用程序之间复制/剪切文本或文件。
[0410] 该方案在9P共享文件系统的基础上,实现了Windows与Android模拟器侧共享剪贴板的相关操作。在用户体验上实现了Windows侧与Android侧剪贴板的功能,与Windows与Android剪贴板的使用方式保持一致,符合用户的操作使用习惯。
[0411] 在图17‑图18描述的方案中,基于用户在源端Android应用程序的窗口针对目标文件的简单的复制/剪切操作,和在目的端Windows应用程序的窗口的简单的粘贴操作,即可实现Android应用程序到Windows应用程序的文件复制/剪切,而不需要用户进行多步、复杂的操作。并且,用户通过鼠标或键盘等输入设备在窗口内的复制/剪切和粘贴操作,更符合用户基于Windows操作系统和电脑的操作使用习惯,因而用户使用体验较好,能够增加产品的竞争力。而且,该方案不需要依赖adb、socket通信和网络能力等因素,文件传输速度快且安全可可靠。
[0412] 需要说明的是,在场景(5)中,以上多个实施例中的部分或全部步骤(例如图17所示流程中的部分步骤),在不冲突的情况下,可以重新组合,从而构成新的实施例。本申请实施例对此不再具体说明。
[0413] 场景(6)、复制和粘贴操作实现Android应用程序到另一Android应用程序的文件传输:
[0414] 在该交互场景中,用户可以通过鼠标、触摸屏或键盘的快捷键,基于Android应用程序1窗口中的目标文件执行复制操作(例如选中目标文件后点击对应的复制选项,或者在目标对象后长按鼠标左键后点击出现的复制选项,或者按下键盘上的Ctrl+C快捷键,或者针对目标文件点击鼠标右键后选择复制选项等),并在Android应用程序2的窗口中执行粘贴操作(例如点击粘贴选项,按下键盘上的Ctrl+V快捷键,或者点击鼠标右键后选择粘贴选项等)。电脑根据用户的复制和粘贴操作,将Android应用程序1中的目标文件复制到Android应用程序1,实现Android应用程序间的文件传输。
[0415] 以下结合图19所示的流程图及图20所示的界面示意图进行说明:
[0416] 1900、Guest侧检测到Android应用程序1窗口中针对目标对象的复制操作。
[0417] 若目标对象为目标文件,则执行步骤1901‑1908;若目标对象为目标文件,则执行步骤1909‑1915。
[0418] 1901、若目标对象为目标文件,则Guest侧响应于用户的复制操作,将目标文件的路径信息存放到Guest侧剪贴板中。
[0419] 1902、Guest侧监控Guest侧剪贴板的变化,将Guest侧剪贴板中目标文件的路径信息存放到共享剪贴板中。
[0420] 其中,Guest侧可以基于Qemu Pipe,将Guest侧剪贴板中目标文件的路径信息存放到共享剪贴板中。
[0421] 1903、Guest侧检测到Android应用程序2窗口中的粘贴操作,该粘贴操作用于指示在该窗口中粘贴目标文件。
[0422] 1904、Guest侧对当前Android应用程序2窗口对应的待粘贴目的路径,以及共享剪贴板中的路径信息对应的目标文件进行预检查。
[0423] 其中,该预检查可以为可选操作。
[0424] 1905、Guest侧在预检查通过后,确定源目标文件是否存在。
[0425] 1906、若Guest侧确定源目标文件存在,则将共享剪切板中的路径信息对应的目标文件复制到Android应用程序2。
[0426] 1907、Guest侧的Android应用程序2根据粘贴位置进行相应处理。
[0427] 示例性的,针对图20中的(a)‑(b)所示的用户基于Android文件管理窗口2001中的目标文件按下快捷键Ctrl+C的复制操作(或者用户点击复制选项2003的复制操作),以及用户基于Android社交应用窗口2002按下快捷键Ctrl+V的粘贴操作,参见图20中的(c),Android社交应用窗口中添加了目标文件,且目标文件发送给了对应的联系人,实现了目标文件从Android文件管理到Android社交应用的复制。
[0428] 在上述过程中,用户执行的是复制和粘贴操作,在其他一些实施例中,如果用户通过鼠标或键盘的快捷键等方式,基于Android文件管理窗口中的目标文件进行剪切操作,则在上述步骤1907之后,该方法还包括:
[0429] 1908、Guest侧删除Android应用程序1中的目标文件。
[0430] 在一些实施例中,电脑在目标文件的复制/剪切过程中还可以显示传输进度条。
[0431] 也就是说,本申请实施例通过Qemu Pipe通信实现Android模拟器Host侧与Guest侧进行通信交互,通过共享剪贴板复制文件路径,在Android应用程序之间复制/剪切目标文件。
[0432] 在步骤1901之后,若目标对象为目标文本,则执行以下步骤:
[0433] 1909、若目标对象为目标文本,则Guest侧响应于用户的复制操作,将目标文本存放到Guest侧剪贴板中。
[0434] 1910、Guest侧监控Guest侧剪贴板的变化,将Guest侧剪贴板中目标文本存放到共享剪贴板中。
[0435] 1911、Guest侧检测到Android应用程序2窗口中的粘贴操作,该粘贴操作用于指示在该窗口中粘贴目标文本。
[0436] 1912、Guest侧对Android应用程序对应的待粘贴目的路径,以及共享剪贴板中目标文本进行预检查。
[0437] 其中,该步骤1912为可选的步骤。
[0438] 1913、Guest侧在预检查通过后,将目标文本复制到Android应用程序2。
[0439] 1914、Guest侧的Android应用程序2根据粘贴位置进行相应处理。
[0440] 该步骤的相关说明可以参见步骤612中的相关描述。例如,Android应用程序2根据具体的粘贴位置,将目标文本插入到粘贴位置,或者将目标文本发送给联系人。
[0441] 如果用户执行的是剪切和粘贴操作,则在上述步骤1914之后,该方法还包括:
[0442] 1915、Guest侧删除Android应用程序1中的目标文本。
[0443] 该方案在用户体验上实现了Android侧剪贴板的功能,与Android剪贴板的使用方式保持一致,符合用户的操作使用习惯。
[0444] 在图19‑图20描述的方案中,基于用户在源端Android应用程序1的窗口针对目标对象的简单的复制/剪切操作,和在目的端Android应用程序2的窗口的简单的粘贴操作,即可实现Android应用程序间的目标对象的复制/剪切,而不需要用户进行多步、复杂的操作。并且,用户通过鼠标或键盘等输入设备在窗口内的复制/剪切和粘贴操作,更符合用户基于Windows操作系统和电脑的操作使用习惯,因而用户使用体验较好,能够增加产品的竞争力。而且,该方案不需要依赖adb、socket通信和网络能力等因素,文件传输速度快且安全可靠。
[0445] 需要说明的是,在场景(6)中,以上多个实施例中的部分或全部步骤(例如图19所示流程中的部分步骤),在不冲突的情况下,可以重新组合,从而构成新的实施例。本申请实施例对此不再具体说明。
[0446] 在本申请的一些实施例中,在上述场景(4)‑(6)中,可传输的目标对象也可以为文件夹,且文件夹的传输方式与文件的传输方式相同。也可以理解为,目标对象类型中的文件包括文件夹。
[0447] 在本申请的另一些实施例中,在上述场景(4)‑(6)中,可传输的目标对象不能为文件夹,若目标对象为文件夹,则Host侧直接通知源窗口不允许复制/剪切,用户在Android应用程序窗口执行粘贴操作时,Host侧可以提示用户(例如通过弹窗等方式来提示用户)不允许复制/剪切;在Android侧窗口中执行复制/剪切文件夹的操作时,Guest侧也不会将相关信息通知给Host侧。
[0448] 在其他一些实施例中,在传输目标对象的过程中,第一操作系统与第二操作系统之间可以通过Socket或其他通信技术进行通信交互。
[0449] 可以理解的是,为了实现上述功能,电子设备包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0450] 本实施例可以根据上述方法示例对电子设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块可以采用硬件的形式实现。需要说明的是,本实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0451] 在采用对应各个功能划分各个功能模块的情况下,上述实施例中涉及的电子设备的一种可能的组成示意图,该电子设备可以包括:显示单元、传输单元和处理单元等。需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
[0452] 本申请实施例还提供一种电子设备,包括一个或多个处理器以及一个或多个存储器。该一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,使得电子设备执行上述相关方法步骤实现上述实施例中的跨系统传输目标对象的方法。
[0453] 本申请的实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的跨系统传输目标对象的方法。
[0454] 本申请的实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中电子设备执行的跨系统传输目标对象的方法。
[0455] 另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使装置执行上述各方法实施例中电子设备执行的跨系统传输目标对象的方法。
[0456] 其中,本实施例提供的电子设备、计算机可读存储介质、计算机程序产品或装置均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
[0457] 通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0458] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0459] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0460] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0461] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0462] 以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。