2 回答

TA貢獻(xiàn)1876條經(jīng)驗 獲得超5個贊
太好了,我最終使用了 ADB,它運行良好。我可以將對象直接發(fā)送到我的 Android 應(yīng)用程序。
桌面類
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import callbacks.MainCallbacks;
public class UsbConnect {
? ? private Socket socket = null;
? ? private ObjectOutputStream out = null;
? ? private ObjectInputStream in = null;
? ? private boolean logged = false;
? ? private boolean play = true;
? ? private MainCallbacks callbacks;
? ? public UsbConnect(MainCallbacks callbacks) {
? ? ? ? this.callbacks = callbacks;
? ? ? ? new Thread(new Runnable() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? while(play) {
? ? ? ? ? ? ? ? ? ? if(!logged) {
? ? ? ? ? ? ? ? ? ? ? ? // Tentative d'ouverture du port?
? ? ? ? ? ? ? ? ? ? ? ? if(!setPort()) {? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? // Tentative de connexion
? ? ? ? ? ? ? ? ? ? ? ? if(connexion()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? callbacks.pdaConnect();
? ? ? ? ? ? ? ? ? ? ? ? ? ? logged = true;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else {
? ? ? ? ? ? ? ? ? ? ? ? if(!testConnexion()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? callbacks.pdaDisconnect();
? ? ? ? ? ? ? ? ? ? ? ? ? ? logged = false;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? Thread.sleep(1000);
? ? ? ? ? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }).start();
? ? }
? ? private void sendData(Object o) {
? ? ? ? try {
? ? ? ? ? ? out.writeObject(o);
? ? ? ? ? ? out.flush();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? callbacks.pdaDisconnect();
? ? ? ? ? ? logged = false;
? ? ? ? }
? ? }
? ? private void destroy() {
? ? ? ? play = false;
? ? ? ? try {
? ? ? ? ? ? in.close();
? ? ? ? ? ? out.close();
? ? ? ? ? ? if (socket != null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? socket.close();
? ? ? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? // NOTHING
? ? ? ? }
? ? }
? ? private boolean testConnexion() {
? ? ? ? try{
? ? ? ? ? ? in = new ObjectInputStream(socket.getInputStream());
? ? ? ? }
? ? ? ? catch (IOException io){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? return true;
? ? }
? ? protected boolean connexion() {
? ? ? ? try{
? ? ? ? ? ? socket = new Socket("127.0.0.1", 38300);
? ? ? ? ? ? try{
? ? ? ? ? ? ? ? out = new ObjectOutputStream(socket.getOutputStream());
? ? ? ? ? ? ? ? out.flush();
? ? ? ? ? ? ? ? in = new ObjectInputStream(socket.getInputStream());
? ? ? ? ? ? ? ? String message = (String) in.readObject();
? ? ? ? ? ? ? ? System.out.println("server>" + message);
? ? ? ? ? ? }
? ? ? ? ? ? catch (IOException io){
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? catch (UnknownHostException e){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? catch (IOException e){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? catch (Exception e){
? ? ? ? ? ? return false;
? ? ? ? }
? ? }
? ? private boolean setPort() {
? ? ? ? try {
? ? ? ? ? ? ProcessBuilder processBuilder = new ProcessBuilder();
? ? ? ? ? ? processBuilder.command("cmd.exe", "/c", "C:\\Users\\Code\\Desktop\\adb.exe forward tcp:38300 tcp:38300");
? ? ? ? ? ? Process process;
? ? ? ? ? ? process = processBuilder.start();
? ? ? ? ? ? int exitVal = -12;
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? exitVal=process.waitFor();
? ? ? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? if (exitVal == 0) {
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? } catch (IOException e1) {
? ? ? ? ? ? e1.printStackTrace();
? ? ? ? ? ? return false;
? ? ? ? }
? ? }
}
當(dāng)設(shè)備連接到 usb 端口時,我的類監(jiān)聽器,設(shè)置端口 adb,然后它嘗試連接到智能手機上的套接字服務(wù)器。
setPort()方法是設(shè)置端口,需要嵌入adb.exe及其dll
安卓類
server = new ServerSocket(38300);
client = server.accept();
out = new ObjectOutputStream(client.getOutputStream());
ois = new ObjectInputStream(client.getInputStream());

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊
據(jù)我所知,這只能通過 ADB(Android 調(diào)試橋)實現(xiàn)。您需要在您的 Android 設(shè)備上啟用 USB 調(diào)試才能正常工作。此外,android adb 可執(zhí)行文件必須存在于桌面 pc 上。(如果需要,您可以將其與桌面應(yīng)用程序可執(zhí)行文件一起發(fā)布。)
通信本身將通過 tcp 套接字進(jìn)行。您的 android 應(yīng)用程序必須偵聽 tcp 端口,而您的桌面應(yīng)用程序必須打開該端口上的連接。
為此,您必須通過此 adb 命令將 tcp 端口從桌面 pc 轉(zhuǎn)發(fā)到 android 設(shè)備:
adb?forward?tcp:6100?tcp:7100
您可以根據(jù)需要更改端口。第一個是桌面 pc 上的端口,第二個是通信將轉(zhuǎn)發(fā)到 android 設(shè)備上的端口。
添加回答
舉報