Existe-t-il un moyen de copier et coller de l'extérieur de VM dans l'émulateur Genymotion?
Copier/coller du texte de l'hôte dans le périphérique virtuel est possible depuis version 2.1. . (Notez que la simple mise à jour de Genymotion ne suffit pas, vous devez également recréer le périphérique virtuel après la mise à jour vers 2.1.0 ou supérieure.)
Le collage peut être effectué via un appui long/clic + PASTE
sur le périphérique virtuel.
Si votre version Genymotion prend en charge le copier/coller, vous pouvez utiliser le menu + C et le menu + V pour copier/coller (la touche de menu se situe généralement entre Alt et Ctrl et agit comme un clic droit de la souris).
Étant donné que Genymotion ne prend pas en charge cette action (même si vous ouvrez VirtualBox, les paramètres de votre VM et définissez le Presse-papiers partagé, cela ne fonctionne toujours pas avec Genymotion 2.0.3 que j'utilise))
Donc, j'utilise une manière alternative, si votre texte n'est pas secret, vous pouvez utiliser une note en ligne comme http://shrib.com/
Collez votre texte là-bas, puis ouvrez le lien sur Android VM, copiez-le et collez-le pour le placer à votre guise. Faites plusieurs étapes mais si vous ne voulez pas taper un texte long (comme le mien, c'est un long SQL)
appuyez longuement sur le bas à droite de la souris et relâchez, puis vous pouvez coller
J'ai eu un besoin similaire il y a quelque temps. Ma solution a été d'écrire une application rapide qui écoute sur un port UDP et vide tout ce qui entre sur ce port dans un message SMS (texte). Ensuite, à partir de la machine hôte, je l'ai envoyé avec netcat depuis La coquille.
Code d'application d'écoute 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();
}
}
}
}
Exécutez ce fil dans une application (vous pouvez utiliser celui par défaut hello-world par exemple); Ensuite, pour envoyer votre message texte, exécutez netcat avec l'option -u pour UDP:
echo "my message" | nc -u 192.168.56.101 4444
N'oubliez pas d'utiliser votre adresse IP genymotion ici.
Je suis également allé plus loin et j'ai créé un script python qui récupère les données du presse-papiers du système et les vide sur le port UDP. Cela pourrait également être utile, surtout si vous souhaitez envoyer des non-ascii du texte ou quelque chose (dans mon cas, j'avais besoin d'envoyer des caractères japonais et de configurer le shell Windows pour afficher les caractères s'est avéré être un exploit que je ne souhaite pas aux faibles de cœur.)
Quoi qu'il en soit, voici le script. Videz-le dans un fichier .py puis double-cliquez dessus pour envoyer le contenu du presse-papiers au socket 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.