将内容粘贴到Genymotion Android模拟器中

53

有没有办法从虚拟机外部复制并粘贴到Genymotion模拟器中?

6个回答

76
2.1.0版本以来,可以将主机中的文本复制/粘贴到虚拟设备中。(请注意,仅更新Genymotion是不够的,更新到2.1.0或更高版本后还必须重新创建虚拟设备。)在虚拟设备中,可以通过长按/点击+ PASTE 进行粘贴操作。

抱歉,我没有Mac,所以其他人必须对此发表评论。我唯一能说的是,在使用复制/粘贴功能较长时间后,我遇到了突然无法工作的情况,必须先重新启动模拟器(可能是因为adb连接丢失)。 - Daniel K
3
我有一台运行Yosemite系统的Mac电脑,在Genymotion v2.3.1上这个方法对我很有效。 - adamdport
有没有办法通过键盘快捷键进行复制/粘贴?就像通常的Cmd+C/Cmd+V热键一样。 - HitOdessit
1
我目前没有设置Genymotion,但是如果我没记错的话,Ctrl/Cmd+C可以将文本复制到剪贴板中,但是Ctrl/Cmd+V不起作用,您必须执行长按操作。您还可以尝试下面答案中提出的热键。answer below - Daniel K
你好,Genymotion界面真的很慢,我该如何使其更流畅? - Furkan Gözükara
在 Mac 上,您可能需要单击小的选择部件,该部件会在长按后显示,以便出现“粘贴”选项。 - Aralox

5
如果您使用的Genymotion版本支持复制/粘贴功能,您可以使用菜单键+C和菜单键+V进行复制/粘贴(菜单键通常位于Alt和Ctrl之间,作为鼠标右键点击)。

4

由于Genymotion不支持此操作(即使您打开VirtualBox,为虚拟机设置共享剪贴板,它在我使用的Genymotion 2.0.3上仍无法使用),因此我使用了另一种方法。如果您的文本不是机密的,您可以使用在线便签工具,如http://shrib.com/

将您的文本粘贴到该工具中,然后在Android虚拟机上打开链接,在其上复制并粘贴到您想要的位置。这需要几个步骤,但如果您不想键入长文本(例如我的SQL语句很长),这是一个好方法。


4

长按鼠标右下角并松开,然后就可以粘贴了。


1

编辑:这个解决方案现在不再必要(2013年时复制粘贴对我无效,但现在有效)。

我以前也有类似的需求。我的解决方案是编写一个快速应用程序,监听一个UDP端口,并将该端口收到的任何内容转储到短信(文本)消息中。然后从主机上,我可以使用shell中的netcat发送它。

UDP监听器应用程序代码:

package com.example.messagemyself;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import android.app.Service;
import android.content.ContentValues;
import android.net.Uri;
import android.util.Log;

public class GetUDPData extends Thread {
    private static final String TAG = "GetUDPData";
    private DatagramSocket datagramSocket;
    private DatagramPacket packet;
    boolean running = true;
    Service srv;
    public GetUDPData(Service s) {
        srv = s;
    }
    public void done() {
        datagramSocket.close();
        running = false;
    }
    @Override
    public void run() {
        try {
            datagramSocket = new DatagramSocket(4444);
            datagramSocket.setSoTimeout(0);
            byte[] buffer = new byte[1024];
            packet = new DatagramPacket(buffer, buffer.length);
        } catch (SocketException e) {
            e.printStackTrace();
        }
        while(running) {
        try {
            Log.d(TAG,"Receiving");
            datagramSocket.receive(packet);
            String message = new String(packet.getData(),0,packet.getLength());
            Log.d(TAG,"Received "+message);
            ContentValues values = new ContentValues();
            values.put("address", "12345");
            values.put("body", message);
            // Post to SMS inbox
            srv.getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
        } catch (Exception e) {
            e.printStackTrace();
        }
        }
    }
}

在应用程序中运行此线程(例如,您可以使用默认的 hello-world 应用程序); 然后,要发送您的文本消息,请使用 -u 选项运行 netcat 以进行 UDP:

echo "my message" | nc -u 192.168.56.101 4444

不要忘记在此处使用您的Genymotion IP地址。

我还进一步创建了一个Python脚本,该脚本从系统剪贴板中获取数据并将其转储到UDP端口。这也可能很有用,特别是如果您想发送非ASCII文本或其他内容(在我的情况下,我需要发送日语字符,并且设置Windows shell以显示这些字符是一项艰巨的任务,我不希望让心脏虚弱的人去尝试。)

无论如何,这是脚本。将其转储到.py文件中,然后双击它将剪贴板内容发送到UDP套接字。

from Tkinter import Tk
r = Tk()
datatosend = r.selection_get(selection = "CLIPBOARD")
r.destroy()

import time
import socket

UDP_IP = "192.168.56.101"
UDP_PORT = 4444

print "sending SMS: %s"%datatosend
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.sendto(datatosend, (UDP_IP, UDP_PORT))
time.sleep(3)
# The sleep is not necessary, but I like it since you can see the
# message for a bit before the shell exits.

0

长按鼠标右键,直到出现粘贴标志


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接