我是靠谱客的博主 傻傻口红,最近开发中收集的这篇文章主要介绍安卓设备通过USB接口实现与pc端的简单数据通信安卓设备通过USB接口实现与pc端的简单数据通信,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
安卓设备通过USB接口实现与pc端的简单数据通信
最近突发奇想,想实现手机和电脑的交互,但考虑到网络限制,想要基于USB数据线实现与pc的通信,查阅很多资料,最终初步实现。以下某些思路来源于网络,大部分是自己写的,自我总结一番。
实现思路:
- 通过adb命令转接端口
- 安卓客户端作为Server,监听socket请求
- pc端为client,请求socket连接
adb下载链接
PC端代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Test {
final static Scanner s = new Scanner(System.in);
public static void main(String[] args) {
try {
// 这句adb命令可以不用.执行下面两句也可以实现转发.只是为了避免重复开启service所以在转发端口前先stop一下
Runtime.getRuntime().exec("adb shell am broadcast -a NotifyServiceStop");
//转发的关键代码
Runtime.getRuntime().exec("adb forward tcp:8000 tcp:2580");
Runtime.getRuntime().exec("adb shell am broadcast -a NotifyServiceStart");
new Thread(){
@Override
public void run() {
try {
Socket socket = new Socket("127.0.0.1", 8000);
// 将信息通过这个对象来发送给Server
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(),"utf-8")),
true);
// 接收服务器信息
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream(),"utf-8"));
//首先发送请求类型
String msg="我来自电脑!";
msg = s.nextLine();
out.println(msg);
out.flush();
msg = in.readLine();
System.out.println(msg);
} catch (UnknownHostException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}.start();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
Android端代码:
package com.example.cjh.news.ADB;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.example.cjh.news.R;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Main2Activity extends AppCompatActivity {
private static final String TAG = "ServerThread";
private TextView textView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
textView = (TextView) findViewById(R.id.text1);
new ServerThread().start();
}
class ServerThread extends Thread {
@Override
public void run() {
Log.d(TAG, "running");
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(2580);
Log.d("TAG", "等待连接");
while (true) {
Socket client = serverSocket.accept();
// 接受客户端信息
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
// 发送给客户端的消息
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())),true);
final String msg = in.readLine();
Log.d(TAG,"msg = "+msg);
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(msg);
}
});
out.println("Server say:"+msg);
out.flush();
Log.d(TAG, "accept");
client.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
Log.d(TAG, "destory");
if (serverSocket != null) {
try {
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
最终效果图
注:
第一次测试的时候出现了乱码,原因是安卓端和pc端的编码方式不同,只要在传输过程中统一编码方式即可。
// 将信息通过这个对象来发送给Server
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(),"utf-8")),true);
// 接收服务器信息
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream(),"utf-8"));
最后
以上就是傻傻口红为你收集整理的安卓设备通过USB接口实现与pc端的简单数据通信安卓设备通过USB接口实现与pc端的简单数据通信的全部内容,希望文章能够帮你解决安卓设备通过USB接口实现与pc端的简单数据通信安卓设备通过USB接口实现与pc端的简单数据通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复