Android WiFi 传图demo
时间: 2025-01-04 11:33:10 浏览: 9
### Android 设备间通过 Wi-Fi Direct 传输图片
为了实现在 Android 设备之间通过 Wi-Fi Direct 进行图片传输的功能,下面提供了一个简化版的代码示例。此代码展示了基本框架和流程:
#### 主要组件初始化
```java
// 初始化Wi-Fi P2P管理器和服务监听器
private WifiP2pManager.Channel channel;
private WifiP2pManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取系统的Wi-Fi P2P服务实例以及通道对象
manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
channel = manager.initialize(this, getMainLooper(), null);
}
```
#### 扫描附近设备
当点击按钮触发扫描动作时:
```java
Button scanBtn = findViewById(R.id.scan_button);
scanBtn.setOnClickListener(v -> {
manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "Peer discovery initiated");
}
@Override
public void onFailure(int reasonCode) {
Log.e(TAG, "Peer discovery failed: " + reasonCode);
}
});
});
```
#### 建立连接请求
一旦发现目标设备,则发起连接请求:
```java
manager.connect(channel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
// 成功建立连接后的处理逻辑...
}
@Override
public void onFailure(int reason) {
Toast.makeText(MainActivity.this,
"Connect failed. Retry.", Toast.LENGTH_SHORT).show();
}
});
```
#### 发送文件(此处以发送位图为例)
成功建立连接之后,可以利用Socket编程来完成实际的数据交换过程:
```java
public static final int SERVER_PORT = 8988; // 定义服务器端口
new Thread(() -> {
try {
File file = new File(filePath); // filePath为待发送图像路径
FileInputStream fis = new FileInputStream(file);
Socket socket = new Socket(hostAddress, SERVER_PORT);
OutputStream os = socket.getOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
os.flush();
socket.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
```
上述代码片段仅作为概念验证用途,在真实应用场景中可能还需要考虑更多细节问题,比如错误处理机制、进度提示等[^1]。
阅读全文